2014-04-03 20 views
6

"this.collection" değerinin yalnızca ilk koleksiyonu göstereceğini anlıyorum, ancak bu Backbone ile uyumlu mu? Yoksa otomatik olarak önceki koleksiyondan kaldırılacak mı?Tek bir Backbone Model Örneği iki koleksiyonda aynı anda olabilir mi?

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 

Yukarıdaki kod Bunu yaparak (özellikle olaylara ilişkin) bir şey kırıyorum diye merak ediyorum, çalışır.

+0

ayrıntılarda size sorunu açıklayın misiniz, koleksiyonundaki modellerde yineleme tarafından çağrılan edilir? – Evgeniy

+0

Elbette, genel anlamda soruyorum, belirli bir durumda değil. – AlexZ

+0

omurga modeli toplama özelliği sağlıyor mu? – Saravanan

cevap

8

TL; DR Hiçbir şey kaynağına bakarak doğrulayabilirsiniz, kıracak, add için bir kestirme yöntem set(model, {add: true, remove: false, merge: false})

size set method de rol bakarsak nereye 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); 
}, 

Modellerin koleksiyonu, zaten bir tane varsa, yeni olana ayarlanmayacaktır, ancak tüm olaylar eklendiği tüm koleksiyonlardan doğru şekilde aktarılacaktır.

tersi de geçerlidir, herhangi bir tahsilat olaylar

for (i = 0, l = models.length; i < l; i++) { 
    ... 
    if (!options.silent) { 
     model.trigger('remove', model, this, options); 
    } 
    ... 
    } 
+2

Birden fazla koleksiyondaki modeller için daha iyi destek bu işlemde eklenmiştir: https://github.com/jashkenas/backbone/commit/14000a8bb93b1b0876870b6211bf8fc5113abf37 –

İlgili konular