gpt4 book ai didi

backbone.js - 一个主干模型实例可以同时在两个集合中吗?

转载 作者:行者123 更新时间:2023-12-04 14:28:06 25 4
gpt4 key购买 nike

我知道它的“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

上面的代码有效,我只是想知道这样做是否破坏了任何东西(特别是与事件相关的东西)。

最佳答案

TL;DR 什么都不会破坏,您可以通过查看源代码来验证这一点,addset(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);
}
...
}

关于backbone.js - 一个主干模型实例可以同时在两个集合中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22838095/

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