我是Backbone.js的新手,并且在收藏视图方面遇到了一些麻烦。 这就是我想要做的事情:
var customersCollection = new _App.Collections.Customers();
var customersView = new _App.Views.Customers({collection: customersCollection});
customersView.render();
这是一个观点 - 我无法理解为什么我不能迭代收集:
_App.Views.Customers = Backbone.View.extend({
render: function() {
console.log('Here is my collection');
console.log(this.collection);
console.log('Now lets iterate over it...');
_.each(this.collection, function(item) {
console.log(item);
}, this);
console.log('...done');
return this;
}
});
我在chrome控制台中看到的内容:
Here is my collection
child {length: 0, models: Array[0], _byId: Object, constructor: function, url: "/admin/customers/latest.json"…}
_byId: Object
length: 5
models: Array[5]
__proto__: Surrogate
Now lets iterate over it...
...done
所以我无法弄清楚为什么我可以看到一个集合,但不能每个人都能看到它。 感谢
//已解决
我发现为什么会发生这种情况。 完全错过.fetch()是异步的,所以当调用render()时,数据仍然不存在于集合中。 这段代码现在适合我,所以我可以继续使用模板等
_App.Views.Customers = Backbone.View.extend({
initialize: function() {
this.collection = new _App.Collections.Customers();
this.collection.on('sync', this.render, this);
this.collection.fetch();
},
render: function() {
this.collection.each(function(item) {
console.log(item);
});
return this;
}
});
new _App.Views.Customers();
此致,尼古拉
答案 0 :(得分:1)
您未正确使用_.each
。
应该是:
_.each(this.collection.models, function(item) {
console.log(item);
},this);
或更好:
this.collection.each(function(item) {
console.log(item);
});