Backbone" smart"更新不合并模型

时间:2014-12-14 08:28:49

标签: javascript json backbone.js

我的收藏:

return Backbone.Collection.extend({

    url: config.API + 'Events?count=1',

    initialize: function() {
        this.fetch();
    },

    more: function() {
        this.fetch({ remove: false, merge: true });
    }

});

对服务器的每个请求都会返回:

  

[{" EVENTID":1,"用户" {"用户ID":6,"用户名":"菲尔""电话":空}"纬度":" 46.3165906656757""经度":" 46.5820399671793 ""说明":" Hdbdjcjfgkgkgjf"" EVENTDATE":" 2014-05-10T21:44:36",& #34; DateCreate":" 2014-11-28T19:19:51"" LastComments":[{" CommentId":1,&#34 ;用户":空,"文本":" HELLO"" DateCreate":" 2014-11-28T17:41:46&#34 ;,"喜欢":空," LikesCount":0},{" CommentId":2"用户":空,&# 34;文本":" HELLO"" DateCreate":" 2014-11-29T00:59:43""喜欢" :空," LikesCount":0},{" CommentId":3,"用户":空,"文本":&#34 ; HELLO"" DateCreate":" 2014-11-29T01:07:13""喜欢":空," LikesCount&#34 ;:0},{" CommentId&#34:4,"用户":空,"文本":" HELLO"" DateCreate":" 2014-11- 29T01:10:41""喜欢":空," LikesCount":0},{" CommentId":5,"用户&# 34;:空,"文本":" HELLO"" DateCreate":" 2014-11-29T01:17:33",& #34;喜欢":空," LikesCount":0},{" CommentId":6,"用户":空,"文本& #34;:" HELLO"" DateCreate":" 2014-11-29T01:29:59""喜欢":空, " LikesCount":0}],"照片":空," LastLikes":空}]

因此,在初始化之后,我们在集合中只有一个模型。但是每次我调用more()时这个模型都不会更新,毕竟我们在集合中有很多重复项,因为我多次调用()。这种行为对我来说似乎很奇怪,因为在我看到的文档中:

  

set方法执行" smart"使用传递的模型列表更新集合。如果列表中的模型尚未包含在集合中,则会添加该模型;如果模型已经在集合中,则其属性将被合并;如果集合包含列表中不存在的任何模型,则将删除它们。所有适当的"添加","删除"和"更改"发生这种情况时会触发事件。返回集合中的触摸模型。如果您要自定义行为,可以使用以下选项将其禁用:{add:false},{remove:false}或{merge:false}。

1 个答案:

答案 0 :(得分:1)

问题是你没有传统的id字段。见Backbone - using a different field name for id

您需要指定自定义模型类型。

var EventModel = Backbone.Model.extend({
   idAttribute: "EventId"
});

Backbone.Collection.extend({
   model: EventModel
})