2011-11-30 25 views
6

Estoy compilando una aplicación usando Backbone.js, Underscore.js, HAML y Coffeescript.Interpolar dentro de los atributos html con Underscore.js

El problema que tengo es obtener variables para interpolar dentro de los atributos del elemento html.

<% _.each(collection.models, function(document) { %> 
%tr 
    %td 
    %input{:type => 'checkbox', :name => "documents[]", :value => "<%= document.attributes.id %>"} 
    %td <%= document.attributes.id %> 
    %td <%= document.attributes.name %> 

    <% } %> 
<% }); %> 

los valores del objeto se muestran correctamente en el interior de la <td>, pero no dentro de atributo de valor de la entrada.

¿Es posible la interpolación dentro de los atributos de un elemento? No pude encontrar una solución.

Gracias

+0

No estoy experimentado en esta área, pero eche un vistazo [aquí] (https://github.com/9elements/haml-coffee) si esto es lo que necesita. Admite coffeescript en atributos. – kubetz

+0

No estoy seguro de cuál es el problema con su código, pero he usado la interpolación con las plantillas de subrayado. – Jack

+0

El problema es con la interpolación dentro de los atributos del elemento html. – Chris

Respuesta

0

Parece que no está cerrando la función en la plantilla adecuada (trate de añadir <% }); %> hasta el final de su plantilla).

No estoy muy familiarizado con la sintaxis de HAML pero aquí hay un ejemplo simple en jsfiddle que utiliza HTML sin formato y una plantilla de subrayado. Como puede ver, definitivamente puede usar la interpolación en medio de los atributos de un elemento.

+0

Disculpe, no incluí el código completo. Estoy actualizando la pregunta. – Chris

+0

Gracias por el enlace. Veo que están interpolando con éxito dentro de los atributos de un elemento. – Chris

+0

Entonces tal vez el problema es con su sintaxis HAML, ya que si miras el jsfiddle al que me he vinculado, puedes ver que se interpola correctamente dentro del atributo de valor de la casilla de verificación. – Jack

4

La solución a este problema es utilizar la opción :escape_attrs de HAML.

Haml::Engine.new(template, :escape_attrs => false).render 
2

Puede intentar usar html_safe que es un método en objetos String. Esto escapar los caracteres HTML en la sentencia de variable (< por ejemplo) y que deja intacta para subrayado para evaluar en tiempo de ejecución:

%input{:type => 'checkbox', :name => "documents[]", :value => "<%= document.attributes.id %>".html_safe} 

(Probado en los carriles 3.0.13)

+0

Esto funciona para mí en Rails 3.2. –

+0

Esto no funciona en Rails 4.2.6, pero no estoy seguro de por qué. Puedo poner el mismo código fuera de un valor de atributo, y mi '<' no se escapa, pero dentro del valor del atributo, lo es. – sameers

+0

Lo que quiero decir es que [la documentación en html_safe] (http://apidock.com/rails/String/html_safe) dice '.html_safe' es equivalente a' raw() 'pero a pesar de que es de hecho valores de atributo externos equivalentes , cuando se pasa a través del motor de plantilla HAML, no lo está, dentro de los valores de atributo. Esto es muy misterioso – sameers

Cuestiones relacionadas