Ruby è una delle lingue più popolari utilizzate sul web. Abbiamo avviato una nuova sessione qui su Nettuts + che ti introdurrà a Ruby, oltre ai grandi framework e strumenti che accompagnano lo sviluppo di Ruby. In questo episodio, vedremo Tilt, una gemma wrapper all-inclusive per i modelli di motori di Ruby.
Se hai usato un framework web di Ruby, come Rails e Sinatra, probabilmente conosci almeno uno dei tanti template engine disponibili: mi occupo di opzioni come ERB o Haml. Quando li si utilizza nel contesto di un framework, è piuttosto semplice? ma a volte sembrano molto integrati; cosa succede se si desidera utilizzarli nel proprio progetto? C'è un modo semplice per sfruttare la loro utilità?
Inserisci la gemma Tilt. Presentato come un'interfaccia "sottile" su un gruppo di diversi motori di modelli Ruby ,? troverete che rende i modelli di rendering un gioco da ragazzi.
Certo, lo installeremo prima.
gem installazione tilt
Se non stai usando RVM (che dovresti essere), potresti doverlo eseguire con i privilegi di root (sudo
).
Ovviamente, dovrai iniziare con un modello per il rendering. Lo manterremo semplice:
<%= title %> Alcuni dei Tuts + Sites
Salva questo a tutsplus.erb
. Si noti che il testo del titolo verrà inserito con Ruby, nonché l'elenco dei siti. Ora, rendiamolo. Lo faremo in questo modo (salvalo dentro using_tilt.rb
):
richiede 'tilt' sites = "Netsuts +" => "http://net.tutsplus.com", "Psdtuts +" => "http://psd.tutsplus.com", "Mobiletuts +" => "http: / /mobile.tutplus.com "," Audiotuts + "=>" http://audio.tutsplus.com " context = Object.new def context.title" Tuts + Sites "template finale = Tilt :: ERBTemplate.new (" tutsplus .erb ") File.open" sites.html "," w "do | file | file.write template.render (context, sites: sites) end
Certo, iniziamo richiedendo Tilt. Quindi, creiamo i nostri dati per il modello: un semplice hash e un semplice oggetto vaniglia. Diamo all'oggetto una proprietà: titolo
. Quindi, creiamo il nostro oggetto modello. Qui, stiamo creando un'istanza di Tilt :: ERBTemplate
class ma l'intero punto di Tilt è che puoi usare qualunque motore di template desideri: ad esempio, potresti usare il Tilt :: HamlTemplate
, Tilt :: SassTempalte
(per CSS), Tilt :: CoffeScriptTemplate
(per CoffeeScript) o qualsiasi altro motore di template supportato Tuttavia, è importante notare che Tilt è solo un involucro: è necessario richiedere la libreria appropriata per il motore di template che si desidera utilizzare. Quindi, se vuoi usare a Tilt :: HamlTemplate
esempio, è necessario richiedere 'haml'
. È possibile visualizzare quali librerie sono richieste per ciascun motore di template nel file Leggimi.
Infine, apriamo il file su cui vogliamo scrivere l'output. L'HTML (o CSS o JavaScript, a seconda del modello e del motore che stai utilizzando) verrà restituito da rendere
metodo dell'oggetto modello. Il rendere
il metodo richiede due parametri. Il primo è un oggetto di contesto: tutte le proprietà di questo oggetto saranno disponibili come variabili all'interno del modello. Quindi, il nostro context.title
la proprietà sarà disponibile come titolo
all'interno del modello. Se ci sono altri valori che vuoi passare nel template, passali come parte del secondo parametro, che è un hash.
Quindi, possiamo eseguire questo script sulla riga di comando:
ruby using_tilt.rb
Ora, guarda nella directory in cui hai salvato questi file: dovresti vedere a sites.html
file. Se lo visualizzi, scoprirai che il modello è stato reso:
Puoi fare cose più complesse con Tilt se passi un blocco a rendere
metodo.
Tilt :: ERBTemplate ('other.erb'). Render (context, other_params) "some text"
Dentro il tuo modello, puoi dare la precedenza
al blocco; tutto ciò che viene restituito dal blocco verrà inserito in quel punto nel modello.
Mentre puoi, naturalmente, passare semplicemente una stringa tramite il blocco, come sopra, c'è un caso d'uso più interessante. Recentemente, ho utilizzato questa funzionalità in Tilt per incorporare un modello specifico per pagina all'interno di una shell a livello di sito. Ad esempio, possiamo dividere il nostro modello sopra in due file:
<%= title %> <%= yield %>
Alcuni dei Tuts + Sites
Ora, per rendere la nostra pagina, possiamo fare questo:
template = Tilt :: ERBTemplate.new ("layout.erb") File.open "sites.html" do | file | file.write template.render (context) Tilt :: ERBTemplate.new ("sites.erb"). render (Object.new, sites: sites) end
Si noti che poiché non avevamo alcun oggetto che volevamo utilizzare come oggetto di contesto, abbiamo appena passato un oggetto Ruby vuoto semplice. L'HTML che viene restituito dal rendering di sites.erb
sarà inserito dove il dare la precedenza
la parola chiave è. Se esegui il codice sopra, dovresti vedere lo stesso risultato di prima.
Si noterà che, fino ad ora, abbiamo dovuto scegliere il motore di template che vogliamo utilizzare quando si crea l'oggetto sottoclasse Tilt. Tuttavia, Tilt riconoscerà l'estensione del modello che hai passato, quindi non devi scegliere esplicitamente un motore: sceglierà quello giusto, in base all'estensione del file:
t = Tilt.new "tutsplus.erb" t.class # => Tilt :: ERBTemplate
Se, per qualche motivo, i tuoi modelli hanno un'estensione di file che non è quella che Tilt si aspetterebbe, puoi registrarlo:
Tilt.register Tilt :: ERBTamplate, "some_extension" t = Tilt.new "my_template.some_extension" t.class # => Tilt :: ERBTemplate
Ci sono alcune altre cose di nicchia che Tilt può fare; se sei interessato a saperne di più, ti consiglio di consultare la documentazione.