2011-11-30 11 views
6

私は、Backbone.js、Underscore.js、HAML、およびCoffeescriptを使ってアプリケーションを構築しています。Underscore.jsでhtml属性を補間する

私が抱えている問題は、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 %> 

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

オブジェクトの値は、入力のvalue属性内<td>の内側に正しく表示されませんが。

要素の属性内の補間は可能ですか?私は解決策を見つけることができませんでした。

おかげ

+0

(レール3.0.13でテスト)

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

このエリアでは、必要な場合は[こちら](https://github.com/9elements/haml-coffee)をご覧ください。これは、属性のcoffeescriptをサポートしています。 – kubetz

+0

あなたのコードに何が問題なのかよく分かりませんが、アンダースコアテンプレートを使って補間を使用しました。 – Jack

+0

問題は、html要素の属性内の補間にあります。 – Chris

答えて

0

あなたは(あなたのテンプレートの末尾に<% }); %>を追加してみてください)、正しくテンプレートで関数を終了していないように見えます。

私はHAMLの構文に精通していませんが、平文HTMLとアンダースコアテンプレートを使用したjsfiddleの簡単な例があります。ご覧のとおり、要素属性の途中で補間を使うことは間違いありません。

+0

申し訳ありませんが、私は完全なコードを含んでいませんでした。私は質問を更新しています。 – Chris

+0

リンクをありがとう。私は彼らが要素の属性内で補間に成功していることがわかります。 – Chris

+0

おそらく問題はあなたのHAML構文にあります。なぜなら、あなたがリンクしているjsfiddleを見れば、それがチェックボックスのvalue属性の中に正しく補間されていることが分かるからです。 – Jack

4

この問題の解決策は、HAMLの:escape_attrsオプションを使用することです。

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

Stringオブジェクトのメソッドであるhtml_safeを試すことができます。これは、変数文のHTML文字(例えば<)を脱出し、アンダースコアは、実行時に評価するためにそのままを残す:私は経験していないよ

+0

これはRails 3.2で動作します。 –

+0

これはRails 4.2.6では動作しませんが、その理由はわかりません。私は同じコードを属性値の外に置くことができ、 '<'はエスケープされませんが、属性値の中にあります。 – sameers

+0

私が言っていることは、[html_safeのドキュメント](http://apidock.com/rails/String/html_safe)は '.html_safe'は' raw() 'と同じですが、 、HAMLテンプレートエンジンを通過したときに、それは属性値の中にありません。これは非常に不思議です。 – sameers