据我所知,它的“this.collection”值只显示第一个集合,但这与Backbone兼容吗?或者它会自动从之前的集合中删除吗?
var MyModel = Backbone.Model.extend({defaults: {test: '123'}});
var MyCollection1 = Backbone.Collection.extend({model: MyModel});
var MyCollection2 = Backbone.Collection.extend({model: MyModel});
var instance = new MyModel({
test: '456'
});
MyCollection1.add(instance);
MyCollection2.add(instance);
console.log(instance.collection); //Returns "MyCollection1" only, not an array of all collections of which this model is a member
上面的代码有效,我只是想知道我是否通过这样做打破了任何事情(特别是与事件有关)。
答案 0 :(得分:8)
TL; DR没有什么会破坏,你可以通过查看来源来验证这一点,add
是set(model, {add: true, remove: false, merge: false})
的简写方法
如果您查看set method modifies the model is here所在的部分,
_addReference: function(model, options) {
this._byId[model.cid] = model;
if (model.id != null) this._byId[model.id] = model;
if (!model.collection) model.collection = this;
model.on('all', this._onModelEvent, this);
},
因此,如果模型的集合已经有一个集合,那么它们将不会被设置为新集合,但是所有事件仍将从添加到它的所有集合中正确传递。
反过来也是如此,通过迭代集合中的模型来调用任何集合事件,
for (i = 0, l = models.length; i < l; i++) {
...
if (!options.silent) {
model.trigger('remove', model, this, options);
}
...
}