2013-05-29 56 views
1

我創建了一個jsFiddle,顯示向集合中添加模型然後迭代集合時遇到的問題。發生的事情是,我添加到集合中的第二個模型覆蓋了我添加到集合中的第一個模型的值。添加主幹集合覆蓋

任何想法爲什麼會發生這種情況?

謝謝!

http://jsfiddle.net/C9wew/4734/

Event = Backbone.Model.extend({ 
    attributes: {}, 
    constructor: function (event) { 
     this.set({ 
      eventType: event.eventType, 
      timestamp: event.timestamp, 
      sendingQuota: event.sendingQuota 
     }); 
    } 
}); 
Events = Backbone.Collection.extend({ 
    model: Event, 
    initialize: function (models, options) {} 
}); 

var collection = new Events(); 

var model1 = new Event({ 
    eventType: "videoStart", 
    sendingQuota: 3, 
    timestamp: +new Date() 
}); 
collection.add(model1); 

var model2 = new Event({ 
    eventType: "videoStart1234", 
    sendingQuota: 100, 
    timestamp: +new Date() 
}); 
collection.add(model2); 

collection.each(function (event, key, list) { 
    console.log("key" + key); 
    console.log(list[key].get("eventType")); 
}); 

回答

2

當延長Backbone.Model,你覆蓋constructor,並與被實例之間共享的對象覆蓋attributes。因此,當您在一個實例中調用set時,它將寫入共享的attributes對象,其中的全部爲實例讀取的對象。

原始Backbone.Model構造函數實例化一個新的attributes對象爲每個實例(等等)。因此,除非您有使用constructor的原因,否則我建議將該代碼移至initialize,並刪除attributes對象。

+0

感謝您的明確解釋。這解決了這個問題。 – sissonb