我有这个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
在这里,似乎没有添加任何东西。我错过了什么吗?
答案 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}}以确保国王在那里。