Javascript 为什么我的backbone.js集合重置只添加了1个模型

Javascript 为什么我的backbone.js集合重置只添加了1个模型,javascript,collections,backbone.js,Javascript,Collections,Backbone.js,有问题的集合获取一组好友,然后使用reset保存所有新好友。我遇到的问题是,它只向收藏中添加了一个朋友 我在cModels上做了一个console.log,它显示了数组中的300多个对象,所以我知道不仅仅只有一个。重置只会添加1的任何原因 这是我的收藏: FriendsCollection = Backbone.Collection.extend({ model: UserModel, getFriends: function () { $.post(baseU

有问题的集合获取一组好友,然后使用
reset
保存所有新好友。我遇到的问题是,它只向收藏中添加了一个朋友

我在
cModels
上做了一个
console.log
,它显示了数组中的300多个对象,所以我知道不仅仅只有一个。重置只会添加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));
    }
});

使用开发工具检查模型后,模型看起来很好。

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


主干集合不允许具有重复id值的模型。(见此)

如果是这种情况,尽管OP应该得到一个错误“不能将同一个模型添加到集合中两次”他是对的-我在
集合中添加了
id:key
,并修复了它。@machineghost我引用的提交已删除,引发了该错误,谢谢。我正准备把电脑设备扔到房间的另一边。我有一组只读的模型(基本上是数据库中其他数据的统计数据,而不是用户可以保存的数据),所以我认为在这种情况下id并不重要。但它确实…主干的collection.reset只是重置集合,然后调用collection.add,不管传递给它什么。Add在遇到问题时抛出错误方面非常好,所以我很惊讶您没有看到任何错误。进行添加的实际行是
splice.apply(this.models,[index,0].concat(models))。您可能需要尝试在调试器前面添加
调试器
控制台.log(this.models,models,index)
行,以查看您的整套模型是否达到了这一点。