2009-10-06 9 views
5

Decir que tengo un par de cosas de recursos con un método ayudante de vista tales como:¿Es posible tener el guión Haml HTML generado por un asistente de visualización en Rails?

module ThingsHelper 
    def foo 
    ret = "" 
    3.times { ret += content_tag(:li, "foo") } 
    content_tag(:ul, ret) 
    end 
end 

Esto, a continuación, se utiliza en una plantilla:

%p 
    = foo 

el código HTML que se genera el siguiente aspecto:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Foo</title> 
    </head> 
</html> 
<body> 
    <p> 
     <ul><li>foo</li><li>foo</li><li>foo</li></ul> 
    </p> 
</body> 

Como puede ver, la salida auxiliar no está indentada como el resto del código. Cualquier forma de remediar esto?

Respuesta

10

Pruebe el haml_tag helper method provisto con Haml. Es como content_tag en algunos aspectos, pero genera HTML apropiadamente sangrado. La diferencia principal es que se envía directamente a la plantilla, en lugar de devolver una cadena. Por ejemplo:

module ThingsHelper 
    def foo 
    haml_tag :ul do 
     3.times { haml_tag(:li, "foo") } 
    end 
    end 
end 

(Como nota al margen, se considera muy mal estilo Ruby a utilizar algo más que dos espacios para el sangrado).

+0

Funcionó muy bien. Bloggeó un ejemplo simple con un formateador para colecciones estructuradas en árbol en: http://tumblr.com/xq73f3ypd –

1

Lo dudo, al menos no sin una gran cantidad de desperdicios.

Su = foo simplemente está imprimiendo lo que devuelve su ayudante foo - no está siendo analizado por haml. Y tampoco puedes escribir haml en tu método de ayuda.

La forma más simple que puedo pensar para lidiar con esto es que sólo tiene que añadir espacios en blanco en los literales a su ayudante (es decir \n y \t).

Usted también podría require la clase correspondiente haml (s) en su ayudante y llamar a los métodos de análisis de forma manual en ret, pero esto es probablemente más complicado de lo que vale la pena.

Cuestiones relacionadas