将模型添加到不起作用的集合中

时间:2014-08-27 16:47:26

标签: javascript backbone.js

我正在尝试使用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"
    });
},

我做错了什么?

2 个答案:

答案 0 :(得分:4)

问题是您要添加具有重复ID的项目。

如果您执行以下操作,则可以:

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

理想情况下,您可能根本不会声明id并让Backbone处理:

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

答案 1 :(得分:3)

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

var id = this.collection.length + 1;

Here是Backbone文档的相关说明:

  

如果您要将集合中的模型添加到集合中,那么它们将被忽略,除非您通过{merge:true},在这种情况下,它们的属性将合并到相应的模型中...... < / p>