我觉得我之前遇到过这个问题,但这与其他时间不同。
我有一系列事件,需要迭代它们。
我构建我的收藏
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'
所以我看到它的方式,我有一系列的事件,但由于某种原因,我不能通过迭代它们得到每一个事件。
答案 0 :(得分:4)
问题是你正在调用MyApp.userEvents.models
上的每个函数,这是一个原始的javascript数组,因此没有每个函数。你应该调用集合本身的每个函数,如下所示:
MyApp.userEvents.each( this.add );
或者如果你真的想使用数组而不是集合对象,你可以直接使用Underscore.js:
_.each( user_events, this.add, this );