有问题循环通过json对象

时间:2013-03-15 17:06:20

标签: javascript json underscore.js

我有像下面的数组

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

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

3 个答案:

答案 0 :(得分:1)

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

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

请参阅underscore documentation

答案 1 :(得分: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

答案 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>
<% }); %>