我通常将下划线的模板存储在这样的数组中:
var tmpl = [
_.template('...'),
_.template('...'),
_.template('...'),
]
现在我遇到了一种情况,我在模板中使用每个循环,但想将它移动到这个数组中。静态 HTML 模板很简单:
var items = [
[name: 'First'],
[name: 'Second'],
[name: 'Third']
];
var html = '<tr>';
_(items).each(function(item) {
html += '<td>'+item.name+'</td>';
});
html += '</tr>';
它工作得很好但很丑,所以我想把它移到模板的tmpl列表中。所以我有这个:
var tmpl = [
_.template('<tr><td>#{name}</td></tr>');
]
所以我的问题- 我如何在模板中构建一个 for 循环并将整个对象传递给它?
我已经重写了我的自定义模板,但它实际上看起来要糟糕得多,而且不起作用,而且语法一团糟。这就是我所说的:
var tmpl = {
vertical: _.template(
'<table data-src="#{id}">'+
'#{_(items).each(function(item) { }'+
'<tr>'+
'<td style="width: #{item.width}px; height: #{item.height}px">'+
'#{item.text}'+
'</td>'+
'</tr>'+
'#{ });}'+
'</table>'
)
}
而不是简单明了:
var table = '<table data-src="'+id+'">';
$(tds).each(function() {
table += '<tr>';
table += '<td style="width: '+$(this).width()+'px;height: '+$(this).height()+'px;">';
table += $(this).html();
table += '</td>';
table += '</tr>';
});
table += '</table>';
请注意,我的模板语法不同。不是<%= var %>
但是#{var}
:
_.templateSettings = { interpolate : /#\{(.+?)\}/g };
我想保留它。