gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:01:33 24 4
gpt4 key购买 nike

我有这个 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

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

最佳答案

该集合完全按照您的指示进行操作:它正在创建一个没有任何模型的集合。

来自fine manual :

constructor / initialize new Backbone.Collection([models], [options])

When creating a Collection, you may choose to pass in the initial array of models.

[models] 表示法意味着 models 是可选的,但您传递一个数组作为初始模型集,一个空数组,但仍然是一个数组。如果您查看the source ,事情会更清楚:

var Collection = Backbone.Collection = function(models, options) {
//...
this.initialize.apply(this, arguments);
if (models) this.reset(models, _.extend({silent: true}, options));
};

所以你会看到,首先调用了initialize方法,然后reset被调用以应用初始模型集。空数组是真实的,因此您最终会执行 this.white.reset([]) 来删除您添加的 king

如果您不传递可选的 models 参数,那么事情会为您带来更好的结果:

this.white = new App.Collection.Pieces(null, { color: 'white' });

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

关于javascript - 如何使用模型配置和初始化 Backbone 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20485853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com