2014-04-03 21 views
6

Tôi hiểu rằng giá trị "this.collection" sẽ chỉ hiển thị bộ sưu tập đầu tiên, nhưng điều này có tương thích với Backbone không? Hoặc nó sẽ tự động bị xóa khỏi bộ sưu tập trước đó?Có thể một Mô hình Backbone đơn lẻ có trong hai bộ sưu tập cùng một lúc không?

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 

Mã trên hoạt động, tôi chỉ tự hỏi liệu tôi có vi phạm bất kỳ điều gì (đặc biệt liên quan đến các sự kiện) hay không bằng cách thực hiện việc này.

+0

bạn có thể xin vui lòng miêu tả bạn vấn đề trong chi tiết? – Evgeniy

+0

Chắc chắn, mặc dù tôi yêu cầu theo nghĩa chung, không phải trong một trường hợp cụ thể. – AlexZ

+0

mô hình xương sống có cung cấp thuộc tính bộ sưu tập không? – Saravanan

Trả lời

8

TL; DR Không có gì sẽ phá vỡ, bạn có thể xác minh điều này bằng cách nhìn vào nguồn, add là một phương pháp viết tắt cho, set(model, {add: true, remove: false, merge: false})

Nếu bạn nhìn vào set method phần nơi nó 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); 
}, 

Vì vậy, bộ sưu tập của các mô hình sẽ không được đặt thành bộ sưu tập mới nếu nó đã có, nhưng tất cả các sự kiện sẽ vẫn được chuyển qua chính xác từ tất cả các bộ sưu tập mà nó được thêm vào.

Điều ngược lại cũng đúng, bất kỳ sự kiện thu thập được gọi bằng cách lặp lại trên các mô hình trong bộ sưu tập,

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

Hỗ trợ tốt hơn cho các mô hình trong nhiều bộ sưu tập đã được thêm vào trong cam kết này: https://github.com/jashkenas/backbone/commit/14000a8bb93b1b0876870b6211bf8fc5113abf37 –

Các vấn đề liên quan