您可以从模板中访问 JavaScript 函数。所以你可以放一些东西window
(即全局范围):
window.underscore_helpers = {
list_of_booleans: function(obj, bools) {
// 'obj' is the object for the template, 'bools'
// is an array of field names. Loop through 'bools'
// and build your HTML...
return the_html_li_elements;
}
};
然后,您将希望利用以下variable
选项_.template
:
默认情况下,模板with
通过语句将数据中的值放在本地范围内。但是,您可以使用变量设置指定单个变量名称。这可以显着提高模板的渲染速度。
_.template("<%= data.hasWith %>", {hasWith: 'no'}, {variable: 'data'});
=> "no"
然后你可以在你的模板中有这样的东西:
<%= underscore_helpers.list_of_booleans(
json,
['a_c', 'mp3', 'gps', 'touchscreen']
) %>
并像这样使用您的模板:
var html = _.template($('#t').html(), model.toJSON(), { variable: 'json' });
// or
var tmpl = _.template($('#t').html(), null, { variable: 'json' });
var html = tmpl(model.toJSON());
演示:http: //jsfiddle.net/ambiguous/Yr4m5/
通过使用该variable
选项,您将不得不说<%= json.attribute %>
而不是,<%= attribute %>
但这很小。
您可以使用类似的方法<li>
一个一个地格式化 s 并在模板中保留更多的 HTML。
另一种选择是在for
模板中添加一个循环,如下所示:
<script id="t" type="text/x-underscore-template">
<ul>
<% var fields = ['a_c', 'mp3', 'gps', 'touchscreen' ] %>
<% for(var i = 0; i < fields.length; ++i) { %>
<li class="<%= json[fields[i]] ? 'true' : 'false' %>"><%= fields[i] %></li>
<% } %>
</ul>
</script>
演示:http: //jsfiddle.net/ambiguous/983ks/
您会注意到这也使用了该variable: 'json'
选项,您需要这样才能[]
在名称位于变量中时使用 on 来按名称获取字段。这个人