骨干集合作为对象数组返回,但不能使用.each

时间:2012-03-09 16:24:12

标签: collections backbone.js models each

我觉得我之前遇到过这个问题,但这与其他时间不同。

我有一系列事件,需要迭代它们。

我构建我的收藏

MyApp.Collections.UserEvents = Backbone.Collections.extend({
    model: MyApp.Models.Event,
    url: 'user_events/' + User.id,
    initialize: function() {
    }
});

MyApp.Models.Event = Backbone.Model.extend({});

我在路由器中获取集合,然后获取视图

MyApp.userEvents = new MyApp.Collections.UserEvents();
MyApp.userEvents.fetch({
    success: function() {
        MyApp.UserEvents.trigger(new MyApp.Views.UserEvents);
    }
});

在视图中我尝试迭代事件

MyApp.Views.UserEvents = Backbone.Views.extend({
    el: 'div#user_events',
    initialize: function() {
        user_events = MyApp.userEvents.models;
        console.log(user_events);
        this.render();
    },
    render: function() {
        user_events.each(this.add);
    },
    add: function(event) {
        console.log(event)
    }
});

在我的控制台中我得到了

[d, d, d, d, d, d, d, d, d, d, d, d, d, d]

UserEvents.js:16Uncaught TypeError: Object [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] has no method 'each'

所以我看到它的方式,我有一系列的事件,但由于某种原因,我不能通过迭代它们得到每一个事件。

1 个答案:

答案 0 :(得分:4)

问题是你正在调用MyApp.userEvents.models上的每个函数,这是一个原始的javascript数组,因此没有每个函数。你应该调用集合本身的每个函数,如下所示:

MyApp.userEvents.each( this.add );

或者如果你真的想使用数组而不是集合对象,你可以直接使用Underscore.js:

_.each( user_events, this.add, this );