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"));
});
4

1 回答 1

2

扩展时Backbone.Model,您将覆盖constructor, 并attributes使用在实例之间共享的对象进行覆盖。因此,当您调用set一个实例时,它正在写入该共享attributes对象,所有实例都从该共享对象中读取。

原始Backbone.Model构造函数为每个attributes实例实例化一个新对象(除其他外)。因此,除非您有使用 的原因,否则我建议将该代码移至,并删除该对象。constructorinitializeattributes

于 2013-05-29T19:24:55.897 回答