Rubino per principianti la gemma Tilt

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.


Video Tutorial


Modelli di rendering

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

    <% sites.each do |name, link| %>
  • "> <%= name %>
  • <% end %>

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:


Cedendo per più potere

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:

layout.erb

    <%= title %>   <%= yield %>  

sites.erb

Alcuni dei Tuts + Sites

    <% sites.each do |name, link| %>
  • "> <%= name %>
  • <% end %>

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.


Utilizzando altre opzioni

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

Scoprire di più

Ci sono alcune altre cose di nicchia che Tilt può fare; se sei interessato a saperne di più, ti consiglio di consultare la documentazione.