无法将模型添加到主干集合

时间:2012-02-08 22:48:18

标签: javascript collections backbone.js equals

我有一个拥有大量属性的模型,但这里感兴趣的两个是idkeykey始终是唯一的,id并非如此。当我尝试将多个具有相同id的模型添加到集合时,我收到此错误:

Uncaught Error: Can't add the same model to a collection twice

我猜这是因为骨干使用id来决定两个模型是否===。那是对的吗?如果有,是否有办法覆盖此行为而无需交换idkey属性的名称?我试着搞乱这个集合的comparator,但无济于事......

2 个答案:

答案 0 :(得分:8)

是的,骨干使用和管理模型的id属性以进行识别。如果您的数据使用不同的属性,则可以将模型的idAttribute设置为您的属性名称,以使主干从此属性中读取id:

var Entry = Backbone.Model.extend({
    idAttribute: "key"
});

var entry = new Entry({ key: 1, name: "an entry" });
alert("entry id: " + entry.id);

但是,您不能同时将模型的id属性用于其他任何内容。

答案 1 :(得分:0)

Backbone阻止我们将相同的模型插入到一个集合中......你可以在backbone.js第676行到第700行看到它

如果你真的想要将相同的模型插入到集合中,只需删除那里的代码

if(existing = this.get(model)){//here
      ...
}