我有像下面的数组
var data = [
{
title: 'This is title',
desc: 'This is desc',
date: '07:12'
},
{
title: 'This is title2',
desc: 'This is desc2',
date: '04:12'
},
{
title: 'This is title3',
desc: 'This is desc3',
date: '09:12'
}
];
现在我想循环浏览这些数据以使用underscorejs模板进行显示。我正在尝试跟随哪个不起作用。
<% _.each(function () { %>
<li>
<span class="time"><%= date %></span>
<p><%= title %></p>
<p><%= desc %></p>
</li>
<% }); %>
上面的代码没有显示任何内容,也没有在控制台中显示任何错误。如何循环显示此数组数据以显示所有数据?
更新
这是一些更多的代码。我从骨干视图传递这些数据
var Message = Backbone.View.extend({
className: 'tops',
render: function () {
console.log(this.model.toJSON()); //<-- see output for this below
this.$el.html(_.template(MessageTemplate, this.model.toJSON()));
return this;
}
});
console.log()输出
Object {title: "This is title", desc: "This is desc", date: "07:12"} message.js:6
Object {title: "This is title2", desc: "This is desc2", date: "04:12"} message.js:6
Object {title: "This is title3", desc: "This is desc3", date: "09:12"}
我将上面的对象传递给我的模板,然后循环显示它。
答案 0 :(得分:1)
您需要指定要循环的对象:
<% _.each(data,function (elem) { %>
<li>
<span class="time"><%= elem.date %></span>
<p><%= elem.title %></p>
<p><%= elem.desc %></p>
</li>
<% }); %>
答案 1 :(得分:0)
评估模板函数时,传入一个包含的数据对象 与模板的自由变量对应的属性。如果你是 写一次性,你可以传递数据对象作为第二个 模板的参数,以便立即渲染而不是 返回模板函数。
您在模板中使用的下划线代码的工作方式与您正常编写的方式相同。 _.each
至少需要两个参数。首先是你想要迭代的项目列表,第二个是对每个项目采取的行动。
_.each([1, 2, 3], alert);
您需要对模板执行相同的操作。
<% _.each(dataSet, function (item) { %>
<li>
<span class="time"><%= item.date %></span>
<p><%= item.title %></p>
<p><%= item.desc %></p>
</li>
<% }); %>
var rendered_html = _.template(template, {dataSet: data})
注意传递到_.template
的第二个对象如何包含dataSet
的键。我们传递给_.template
的密钥可以在我们的模板代码中用来引用与它们相关联的值。
您可以在此处查看示例:http://jsbin.com/upugaz/1/edit
答案 2 :(得分:0)
将数组传递给模板时,必须为数组命名:
this.$el.html(_.template(MessageTemplate, { 'items': this.model.toJSON() }));
现在,您可以在模板中引用要循环的数组:
<% _.each(items, function (item) { %>
<li>
<span class="time"><%= item.date %></span>
<p><%= item.title %></p>
<p><%= item.desc %></p>
</li>
<% }); %>