主干“智能”更新不会合并模型

Backbone "smart" update doesn't merge models

本文关键字:合并 模型 更新 智能 主干      更新时间:2023-09-26

我的收藏:

return Backbone.Collection.extend({
    url: config.API + 'Events?count=1',
    initialize: function() {
        this.fetch();
    },
    more: function() {
        this.fetch({ remove: false, merge: true });
    }
});

对服务器的每个请求都会返回以下内容:

[{"EventId":1,"User":{"UserId":6,"UserName":"phil","Photo":null},"纬度":"46.3165906656757","经度":"46.5820399671793","描述":"Hdbdjcjfgkgkgkgjf","EventDate":"2014-05-10T21:44:36","DateCreate":"2014-11-28T19:19:51","LastComments":[{"CommentId":1,"User":null,"Text":"HELLO","DateCreate":"2014-11-28T17:41:46","Likes":null,">

LikesCount":0},{"CommentId":2,"User":null,"Text":"HELLO","DateCreate":"2014-11-29T00:59:43","Likes":null,"LikesCount":0},{"CommentId":3,"User":null,"Text":"HELLO","DateCreate":"2014-11-29T01:07:13","Likes":null,"LikesCount":0},{"CommentId":4,"User":null,"Text":"HELLO","DateCreate":"2014-11-29T01:10:41","Likes":null,"LikesCount":0},{"CommentId":5,"User":null,"Text":"HELLO","DateCreate":"2014-11-29T01:17:33","Likes":null,"LikesCount":0},{"CommentId":6,"User":null,"Text":"HELLO","DateCreate":"2014-11-29T01:29:59","Likes":null,"LikesCount":0}],"照片":null,"LastLikes":null}]

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

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

问题是你没有传统的id字段。请参阅主干 - 对 id 使用不同的字段名称

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

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