我是Backbone JS的新手,一直关注Christopher Coenraets Wine Cellar tutorial。
一切正常但花花公子但是我不明白他是如何使用this.model.models
来访问集合而不是this.collection
。此外,当我尝试将代码更改为后者时,似乎this.collection
未定义。
window.WineListView = Backbone.View.extend({
tagName:'ul',
initialize:function () {
this.model.bind("reset", this.render, this);
},
render:function (eventName) {
_.each(this.model.models, function (wine) {
$(this.el).append(new WineListItemView({model:wine}).render().el);
}, this);
return this;
}
});
答案 0 :(得分:6)
两件事让你感到沮丧:
您可以根据需要在视图中注入集合。通常的方法是传递一个集合属性,但在这里它作为路由器中的模型传递:
this.wineList = new WineCollection();
this.wineListView = new WineListView({model:this.wineList});
collection.models保存集合中的原始模型数组
模型 collection.models
对集合内JavaScript模型数组的原始访问。 通常你会想要使用get,at或Underscore方法 访问模型对象,但偶尔会直接引用数组 是理想的。
如果要在视图中使用this.collection
,则应将路由器修改为
this.wineList = new WineCollection();
this.wineListView = new WineListView({collection: this.wineList});
然后您可以将其用作
window.WineListView = Backbone.View.extend({
tagName: 'ul',
initialize: function () {
this.collection.bind("reset", this.render, this);
},
render: function (eventName) {
// Backbone proxies Underscore methods on collections
// _.each(this.collection.models, function (wine) {
this.collection.each(function (wine) {
$(this.el).append(new WineListItemView({model: wine}).render().el);
}, this);
return this;
}
});