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>');