2011-10-14 10 views
13

Desidero servire modelli lato client che sono stati pre-elaborati tramite HAML. Ho provato usando l'haml_assets gem e aggiungendo il seguente codice a un inizializzatore:Aggiunta di HAML alla pipeline di asset Rails

Rails.application.assets.register_engine ".haml", Tilt::HamlTemplate 

Entrambi questi metodi servono la HAML grezzo e non compilati HAML quando accedere al bene. Come posso aggiungere HAML alla pipeline?

risposta

0

Utilizzando lo stesso approccio che ho:

%tr 
    %th 
    %a.action.link.show 
    %td 
    %td 

restituito Haml come pura. Ma

%tr 
    %th 
    %a.action.link.show 
    %td cell 2 
    %td cell 3 

è stato servito come chunk html. Quindi penso che questo sia qualcosa con haml gem. È possibile forzare la conversione Haml con qualcosa di simile:

%tr 
    %th 
    %a.action.link.show 
    %td &nbsp 
    %td &nbsp 

Speranza che aiuta ...

5

questo funziona per me:

# app/assets/javascripts/test.html.haml 

%p hello 

# config/initializers/haml_template.rb 

Rails.application.assets.register_mime_type 'text/html', '.html' 
Rails.application.assets.register_engine '.haml', Tilt::HamlTemplate 

Questo funziona per http://127.0.0.1:3000/assets/test.html.haml

Rails.application.assets è un Sprockets::Environment.

Vedi qui per riferimento API:

+0

Questo funziona dandy per me nel mio ambiente dev, ma quando spingo a produzione I' Sto ancora ottenendo HAML crudo. Sto scavando in questo momento ma se qualcuno ne ha la minima idea, sarei molto grato. –

+0

Non funziona nel mio ambiente di sviluppo, puoi darmi aiuto? Se accedo direttamente al file .html.haml o al file .html, funge da stringa, non da html, nessuno di essi. – felipeclopes

12

Giusto per chiarire le cose, dal momento che ho trovato le risposte attuali un po 'irritanti (mi ha portato nella giusta direzione anche se)

Funziona, se ho questa linea in un file di inizializzazione:

# config/initializers/haml_assets.rb 
Rails.application.assets.register_engine '.haml', Tilt::HamlTemplate 

Buttare i file nella cartella Haml asset, ad esempio:

# app/assets/templates 

fare non utilizzare la gemma haml_asset però!

+0

Questo non funziona per me su Rails 3.2.13. Modifica: Forse funziona e ho solo bisogno di cambiare il modello per forzare una ricompilazione? La stessa cosa era richiesta per la risposta dell'utente2470396. – Ibrahim

+0

Sì, dopo aver modificato il file ha funzionato, anche se ho provato la modifica application.rb dopo questa non ha funzionato, ma ho poi ripristinato tutto dall'altra risposta e funziona ancora. – Ibrahim

10

il seguente codice nel application.rb funziona per me in Rails 3.2 (sia nello sviluppo e nella produzione dopo il pre-compilazione): si

require 'haml' 

config.assets.paths << Rails.root.join("app", "assets", "templates") 

class HamlTemplate < Tilt::HamlTemplate 
    def prepare 
    @options = @options.merge :format => :html5 
    super 
    end 
end 

config.before_initialize do |app| 
    require 'sprockets' 
    Sprockets::Engines #force autoloading 
    Sprockets.register_engine '.haml', HamlTemplate 
end 

Questo permette di mettere voi modelli in app/attività/templates chiamato con il suffisso .html.haml (è necessario il .html in esso altrimenti i file .htm vengono generati al posto di .html nel processo di pre-compilazione).

+0

questo è stato l'unico che ha funzionato per me. –

+1

Ha funzionato anche per me (almeno fino ad ora). Una nota: se il tuo modello HAML viene ancora visualizzato come HAML non elaborato, apporta una piccola modifica e ricarica. Rails sembra piuttosto aggressivo sulla memorizzazione nella cache delle risorse, anche in dev. – Micah

0

Due delle risposte precedenti dovevano essere combinate prima di avere una soluzione completa.

La seguente riga funziona in fase di sviluppo:

# config/initializers/haml_assets.rb 
Rails.application.assets.register_engine '.haml', Tilt::HamlTemplate 

Ma poi non riesce in alcun precompilare.

Per asset servito Haml al lavoro dopo un precompilazione, abbiamo anche bisogno di queste righe application.rb:

require 'haml' 

config.assets.paths << Rails.root.join("app", "assets", "templates") 

class HamlTemplate < Tilt::HamlTemplate 
    def prepare 
    @options = @options.merge :format => :html5 
    super 
    end 
end 

config.before_initialize do |app| 
    require 'sprockets' 
    Sprockets::Engines #force autoloading 
    Sprockets.register_engine '.haml', HamlTemplate 
end