nderscore.js のテンプレートライブラリを使用していますが、テンプレート内でロジックを使用する方法がわかりません。たとえば、テンプレートにタグの配列を印刷したいと思います。これに対する最善のアプローチは何ですか?
Javascript:
bunny_data = {
name: "sprinkles",
age: 1,
tags: ['fuzzy','wuzzy']
};
bunny_view = $("#bunny-template").html();
$(body).append(_.template(bunny_view,bunny_data));
テンプレート:
<script type='text/template'>
<div>
<h5><% = name %></h5>
<ul class='tag-list'>
<!-- How do I print the tags here? -->
</ul>
</div>
</script>
@Kenが示唆するように、bunny_data
をカプセル化する必要はありません、あなたは正しい方向に進んでいました。 _.
関数を呼び出すか、単純なJavascript構造を使用するかはあなた次第ですが、アンダースコアテンプレートには組み込みのフロー構造がないため、コードを埋め込むだけです(調べてみてください)。 eco または Mustache または必要に応じて何か)。
私の例は次のようになります(あなたが所有しているものとほぼ同じです):
<script type='text/template' id="bunny-template">
<div>
<h5><%= name %></h5>
<ul>
<% for(var tag in tags) { %>
<li><%= tags[tag] %></li>
<% } %>
</ul>
</div>
</script>
次のJavascriptを使用します。
bunny_data = {
name: "sprinkles",
age: 1,
tags: ['fuzzy','wuzzy']
};
bunny_view = $("#bunny-template").html();
$(body).append(_.template(bunny_view, bunny_data));
実行されていることを確認できます ここ 。
(個人的な好みとして、私はこの理由からテンプレートを除くすべてのアンダースコアのヘビーユーザーです。より複雑なユースケースがある場合にテンプレートに入力する必要のあるコードの量に満足していません)。
JavaScriptでbunny_data
を正しく設定していないようです。
の代わりに:
$(body).append(_.template(bunny_view,bunny_data));
試してください:
$(body).append(_.template(bunny_view, { bunny_data: bunny_data }));
テンプレートのデータを印刷します(<%= name %>
の%の後のスペースを削除したことに注意してください):
<script type='text/template'>
<div>
<h5><%= name %></h5>
<ul class='tag-list'>
<% _.each(bunny_data, function(bd) { %>
<li><%= bd.name %></li>
...
<% }); %>
</ul>
</div>
</script>
うまくいけば、それが役立つでしょう。
また、join
でうまくいくので、htmlでは次のようになります。
<ul>
<li><%= tags.join('</li><li>') %></li>
</ul>
jsFiddle で確認してください。