2014-08-27 56 views
2

我试图与Backbone一起玩,似乎遇到了问题。我的活动正在开火,但集合尚未更新。我已经包括下面的事件回调,但整体例如可以在这里看到:http://jsfiddle.net/xp27dm7L/7/将模型添加到集合不起作用

addItem: function() { 
    alert(1) 
    var id = this.collection.length; 
    this.collection.add({ 
     "id": "p"+id, 
     "name" : "ghgjhj", 
     "title" : "EsssyyyyEEE", 
     "background" : "ssssFyFFF" 
    }); 
}, 

我到底做错了什么?

回答

4

问题是你添加一个带重复ID的项目。

如果你做到以下几点,它的工作原理:

this.collection.add({ 
    "id": "p"+Math.random(), // Just an example, of course! 
    "name" : "ghgjhj", 
    "title" : "EsssyyyyEEE", 
    "background" : "ssssFyFFF" 
}); 

理想情况下,你可能不声明id都让骨干搞定:

this.collection.add({ 
    "name" : "ghgjhj", 
    "title" : "EsssyyyyEEE", 
    "background" : "ssssFyFFF" 
}); 

您还可以使用的length您的收藏集以设置新ID:

var id = this.collection.length + 1; 
this.collection.add({ 
    "id": "p" + id, 
    "name" : "ghgjhj", 
    "title" : "EsssyyyyEEE", 
    "background" : "ssssFyFFF" 
}); 
3

它忽略了新项目,因为它有一个重复的ID。这应该修复它(Fiddle):

var id = this.collection.length + 1; 

Here是从骨干文档相关注意事项:

如果要添加的模型有已在集合中的集合,他们将被忽略,除非你通过{merge:true},在这种情况下,他们的属性将被合并到相应的模型中...

+0

谢谢!我不知道合并选项。 – 2014-09-02 14:13:06