1

我有如下数组

  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"} 

我将上面的对象传递给我的模板,然后循环显示它。

4

3 回答 3

1

您需要指定要循环的对象:

<% _.each(data,function (elem) { %>
    <li>
        <span class="time"><%= elem.date %></span>
        <p><%= elem.title %></p>
        <p><%= elem.desc %></p>
    </li>
<% }); %>

请参阅下划线文档

于 2013-03-15T17:07:41.060 回答
0

来自underscorejs.org

当您评估模板函数时,传入一个数据对象,该对象具有与模板的自由变量对应的属性。如果您正在编写一次性,您可以将数据对象作为第二个参数传递给模板,以便立即呈现而不是返回模板函数。

您在模板中使用的下划线代码的工作方式与您正常写出它的方式相同。_.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

于 2013-03-15T17:32:59.997 回答
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>
<% }); %>
于 2013-03-15T18:56:41.297 回答