如何使用模型配置和初始化Backbone集合

时间:2013-12-10 04:04:44

标签: javascript backbone.js

我有这个Backbone集合:

App.Collection.Pieces = Backbone.Collection.extend({
  model: App.Model.Piece,
  initialize: function(models, options) {
    this.color = options.color;
    king = new this.model({
      color: this.color
    });
    this.add(king);
    console.log(this.models[0]); // the `king` model is logged
    }
});

initialize函数似乎可以创建并添加king模型。但在另一个文件中,我实例化集合并记录结果:

this.white = new App.Collection.Pieces([], { color: 'white' });
console.log(this.white.models[0]); // `undefined` is logged

在这里,似乎没有添加任何东西。我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

该系列完全按照您所说的去做:它正在创建一个没有任何模型的集合。

来自fine manual

  

构造函数/初始化 new Backbone.Collection([models], [options])

     

创建集合时,您可以选择传递模型的初始数组。

[models]表示models表示var Collection = Backbone.Collection = function(models, options) { //... this.initialize.apply(this, arguments); if (models) this.reset(models, _.extend({silent: true}, options)); }; 是可选的,但您将数组作为初始模型集传递,尽管是空数组但是数组。如果你看一下the source,事情会更清楚:

initialize

所以你看到首先调用this.white.reset([])方法,然后调用reset来应用初始模型集。一个空数组很简洁,所以你最终会用king来删除你添加的models

如果你没有传递可选的this.white = new App.Collection.Pieces(null, { color: 'white' }); 参数,那么事情将更适合你:

reset

或者,如果你一直想要一个国王,你可以覆盖集合上的{{1}}以确保国王在那里。