2011-10-14 25 views
13

Me gustaría servir plantillas del lado del cliente que se hayan procesado previamente a través de HAML. He intentado usar el haml_assets gem y añadiendo el siguiente código a un inicializador:Agregar HAML a la canalización de activos de Rails

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

Ambos métodos sirven al HAML prima y no compilados HAML cuando accedo al activo. ¿Cómo puedo agregar HAML a la tubería?

Respuesta

0

Utilizando el mismo enfoque Tengo:

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

regresaron haml tan puro. Pero

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

se utilizó como html chunk. Entonces creo que esto es algo con haml gem. Puede forzar la conversión haml con algo como esto:

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

creo que sirve ...

5

Esto funciona para mí:

# 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 

Esto funciona para http://127.0.0.1:3000/assets/test.html.haml

Rails.application.assets es una Sprockets::Environment.

ver aquí para referencia de la API:

+0

Esto funciona excelente para mí en mi entorno de desarrollo, pero cuando la empujo a la producción I' Todavía me estoy poniendo crudo HAML. Indagando en este momento pero si alguien tiene una pista, estaría muy agradecido. –

+0

No funciona en mi entorno de desarrollo, ¿me puede ayudar? Si accedo al archivo .html.haml o .html directamente, sirve como una cadena, no como html, como ninguna de ellas. – felipeclopes

12

Sólo para aclarar las cosas, ya que creo que las respuestas actuales un poco irritante (me llevó a la dirección correcta, aunque)

Funciona, si tengo esta línea en un archivo de inicializador:

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

Lance sus archivos en la carpeta HAML activos, por ejemplo:

# app/assets/templates 

Haz no usar la gema haml_asset sin embargo!

+0

Esto no funciona para mí en Rails 3.2.13. Editar: ¿Tal vez funciona y solo necesitaba cambiar la plantilla para forzar una recompilación? Lo mismo se requirió para la respuesta del usuario2470396. – Ibrahim

+0

Sí, después de modificar el archivo funcionó, aunque probé la modificación de la aplicación.rb después de que esta no funcionó, pero luego revertí todo lo de la otra respuesta y aún funciona. – Ibrahim

10

El siguiente código en application.rb funciona para mí en Rails 3.2 (tanto en el desarrollo y en la producción después de la pre-compilación):

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 

Esto le permite poner plantillas en app/activos/templates nombrado con el sufijo .html.haml (necesita el .html allí o, de lo contrario, los archivos .htm se generan en lugar de .html en el proceso de precompilación).

+0

este fue el único que funcionó para mí. –

+1

Funcionó para mí también (en desarrollo hasta ahora, al menos). Una nota: si su plantilla HAML todavía está representando como HAML sin procesar, haga un pequeño cambio y vuelva a cargar. Rails parece bastante agresivo sobre el almacenamiento en caché de los activos, incluso en dev. – Micah

0

Dos de las respuestas anteriores deben combinarse antes de que tengamos una solución completa.

La siguiente línea trabaja en el desarrollo:

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

Pero entonces falla en cualquier compilación previa.

Para activos servido haml al trabajo después de una compilación previa, sino que también necesitan estas líneas en 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 
Cuestiones relacionadas