使用下划线模板避免重复 - 骨干
Avoiding repetition with underscore templates - backbone
假设我有一个具有一堆布尔属性的主干模型:
Car = Backbone.Model.extend({});
car_one = new Car({
a_c: true,
mp3: true,
gps: false,
touchscreen: false,
// etc...
})
我希望能够呈现这些布尔属性的列表,并在它们旁边有一个图标,具体取决于真或假。如果为 true,则图标将为绿色勾号,否则,显示红色 X 图标。
以下几行
:<ul>
<li><img src="tick.png">AC</li>
<li><img src="tick.png">MP3</li>
<li><img src="cross.png">Gps</li>
<li><img src="cross.png">Touch screen</li>
</ul>
有没有更好的方法来做到这一点,而不是将每个li
包装在模板中的if statement
中:
<% if (model.a_c === true) { %>
// show tick...
<% } else { %>
// show red cross..
<% } %>
我有大约 12 个布尔属性需要像这样渲染......
您可以从模板中访问 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>
的格式,并在模板中保留更多 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'
选项,您需要它,以便当名称位于变量中时,您可以使用 []
按名称获取字段。这个
相关文章:
- es6 相当于下划线查找位置
- 用空格替换下划线PHP
- 如何使用下划线js转换这些数据
- 带嵌套json的下划线js查找
- 如何逃离<>在javascript下划线模板中
- TinyMCE从MSWord粘贴的文本在所有文本下加下划线
- 使用lodash下划线基于键拆分jsonarray
- 在控制台中显示下划线变量
- 如何从另一个带下划线的数组中筛选带元素的数组
- 筛选下划线中的对象
- 使用下划线模板避免重复 - 骨干
- 将下划线 1.8.3 换成骨干木偶 2.4.4 中的洛达什 4.2.1
- 使用 jsfiddle:如何使用下划线.js或骨干.js库
- 构建大型jQuery移动Web应用程序:使用iFrames作为页面?骨干、骨干、下划线和其他框架
- 使用带有下划线循环的回调函数.js骨干.js项目不起作用
- 使用RequireJS加载骨干和下划线
- 在Rails中嵌入骨干响应到下划线模板中
- 如何轮询更新骨干下划线模板
- 骨干和下划线模板一个简单的视图
- 在单个文件中加载骨干/下划线模板