Backbone JS - this.model.models而不是this.collection?

时间:2013-01-04 11:54:53

标签: backbone.js backbone-collections

我是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;
    }

});

1 个答案:

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