2012-07-06 30 views
12

有问题的集合抓住一堆朋友,然后它使用reset保存所有新朋友。我遇到的问题是,它只为该集合添加了1个朋友。为什么我的backbone.js集合重置仅添加1个模型

我在cModels上做了一个console.log,它在数组中显示了超过300个对象,所以我知道不仅有1个。复位只会加1的任何原因?

下面是我收集:

FriendsCollection = Backbone.Collection.extend({ 
    model: UserModel, 

    getFriends: function() { 
     $.post(baseUrl + dataFriendsUrl, $.proxy(function(data) { 
      var friends = $.parseJSON(data); 
      var cModels = []; 

      for(var key in friends.data) {     
       var user = new UserModel(); 
       user.set({ 
        fbid: friends.data[key].id, 
        username: friends.data[key].name 
       }); 

       cModels.push(user); 
      } 

      this.reset(cModels); 

      console.log(this); 

     }, this)); 
    } 
}); 

,这些模型看起来很好,与开发工具检查他们之后。

+0

骨干的collection.reset只是重置集合,然后调用collection.add传递给它的任何东西。当你遇到问题时添加相当不错,所以我很惊讶你没有看到任何问题。添加的实际行是'splice.apply(this.models,[index,0] .concat(models));'。您可能想尝试在它之前添加一个'debugger'或'console.log(this.models,models,index)'行,以查看您的整套模型是否正在实现这一点。 – machineghost 2012-07-06 21:20:09

回答

28

这可能是因为模型具有相同的ID。

Backbone集合不允许具有重复的id值的模型。 (看到这个commit

+0

如果是这种情况,虽然OP应该会出现错误“无法将两次相同的模型添加到集合中” – machineghost 2012-07-06 21:16:59

+0

他是对的 - 我在'set'中添加了'id:key',并修复了它。 – xil3 2012-07-06 21:25:14

+1

@machineghost我参考的提交删除提出该错误 – Paul 2012-07-06 21:40:02

相关问题