Javascript 如何制作一个干净的模板并将多个项目传递给它?
我通常将下划线模板存储在如下数组中:Javascript 如何制作一个干净的模板并将多个项目传递给它?,javascript,underscore.js,Javascript,Underscore.js,我通常将下划线模板存储在如下数组中: var tmpl = [ _.template('...'), _.template('...'), _.template('...'), ] 现在我遇到了这样一种情况:我使用模板中的每个循环,但希望将其移动到这个数组中。静态HTML模板很简单: var items = [ [name: 'First'], [name: 'Second'], [name: 'Third'] ]; var html = '<tr>';
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>';
我想保留它。以下是我将使用下划线的功能性功能所做的:
var row = _.template('<td><td style="width: #{width}px; height: #{height}px">'+
'#{text}</td></tr>');
function rows ( items ) {
return _.reduce( _.map( items, function( item ) { return row( item ); }),
function( row, memo ) { return row.concat( memo ); }, "");
}
var table = _.template('<table data-src="#{ id }">#{ rows(items) }</table>');
var row=u.template(“”+
“#{text}”);
功能行(项目){
return u.reduce(u.map(items,function(item){return row(item);}),
函数(行,备注){return row.concat(memo);},“”;
}
var table=35;.template('#{rows(items)}');
请注意,行
函数可以使用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>';
_.templateSettings = { interpolate : /#\{(.+?)\}/g };
var row = _.template('<td><td style="width: #{width}px; height: #{height}px">'+
'#{text}</td></tr>');
function rows ( items ) {
return _.reduce( _.map( items, function( item ) { return row( item ); }),
function( row, memo ) { return row.concat( memo ); }, "");
}
var table = _.template('<table data-src="#{ id }">#{ rows(items) }</table>');