2011-11-30 13 views
6

Sto costruendo un'applicazione utilizzando Backbone.js, Underscore.js, HAML e Coffeescript.Interpola all'interno degli attributi html con Underscore.js

Il problema che sto riscontrando è quello di ottenere variabili da interpolare all'interno di attributi di elementi 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 %> 

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

valori dell'oggetto vengono visualizzati correttamente all'interno del <td>, ma non all'interno attributo value dell'ingresso.

È possibile l'interpolazione all'interno degli attributi di un elemento? Non ero in grado di trovare una soluzione.

Grazie

+0

Non sto sperimentato in questo settore, ma per favore date un'occhiata [qui] (https://github.com/9elements/haml-coffee) se questo è ciò che vi serve. Supporta coffeescript in attributi. – kubetz

+0

Non sono sicuro del problema con il codice, ma ho utilizzato l'interpolazione con i modelli di sottolineatura. – Jack

+0

Il problema è con l'interpolazione all'interno degli attributi dell'elemento html. – Chris

risposta

0

Sembra che non si sta chiudendo la funzione nel modello corretto (provare ad aggiungere <% }); %> alla fine del vostro template).

Non ho molta familiarità con la sintassi di HAML, ma ecco un semplice esempio su jsfiddle utilizzando HTML semplice e un modello di sottolineatura. Come puoi vedere puoi usare l'interpolazione in mezzo agli attributi di un elemento.

+0

Siamo spiacenti, non ho incluso il codice completo. Sto aggiornando la domanda. – Chris

+0

Grazie per il link. Vedo che stanno interpolando con successo all'interno degli attributi di un elemento. – Chris

+0

Allora forse il problema è con la tua sintassi HAML, dal momento che se guardi il jsfiddle che ho collegato a te puoi vedere che interpola correttamente all'interno dell'attributo value della casella di controllo. – Jack

4

La soluzione a questo problema consiste nell'utilizzare l'opzione :escape_attrs di HAML.

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

Si può provare a utilizzare html_safe, che è un metodo su oggetti String. Questo sfuggirà i caratteri HTML nella dichiarazione variabili (< per esempio) e lascerà intatto per sottolineatura di valutare in fase di esecuzione:

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

(Testato su rotaie 3.0.13)

+0

Questo funziona per me su Rails 3.2. –

+0

Questo non funziona su Rails 4.2.6, ma non sono sicuro del perché. Posso mettere lo stesso codice al di fuori di un valore di attributo, e il mio '<' non è sfuggito, ma all'interno del valore dell'attributo, lo è. – sameers

+0

Ciò che intendo è, [la documentazione su html_safe] (http://apidock.com/rails/String/html_safe) dice '.html_safe' è equivalente a' raw() 'ma sebbene sia di fatto equivalente ai valori degli attributi esterni , quando viene passato attraverso il motore di template HAML, non lo è, all'interno dei valori degli attributi. Questo è molto misterioso. – sameers

Problemi correlati