0

关于我关于主干集合视图的另一个问题,添加不被模型调用

我有我的模型

var Client = Backbone.Model.extend({
    idAttribute: 'ip'
});
var Colony = Backbone.Collection.extend({
    url: '/presence/knock',
    model: Client
});

我也试过

var Client = Backbone.Model.extend({
    ipAttribute: function(){
        return this.options.ip
    }
});

我也尝试过使用id属性而不是使用ip. 但没有任何效果。似乎 Backbone 正在比较整个对象。不是所以idAttribute如果两个对象EXACTLY相同则不会触发add但是如果有任何不存在的更改idAttribute仍然认为模型是新的并触发add

我有一个http://jsfiddle.net/3QE3u/使用模拟 ajax 的小提琴(基于我几天前提出的上述问题的解决方案)。

4

1 回答 1

0

如果有任何不在 idAttribute 中的更改仍然认为模型是新的并触发添加

在小提琴的代码中,您还将集合的“更改”事件绑定到“addAll”函数

this.collection.bind('change', this.addAll);

如果您注释此行,您的代码将按预期工作。

现在它是如何工作的:当第一个 fetch 函数被调用时,为 ip 为“127.0.0.2”的项目触发“add”事件,为 ip 为“127.0.0.1”的项目触发“change”。当第二次调用 fetch 函数时,两个项目都会触发“change”事件。对于每次连续调用 fetch,都会为两个项目触发“更改”事件。(旁注:刷新事件根本不会触发)

您可以编写另一种方法来处理“更改”事件,并且在该方法中您可以更新现有的 html 元素以反映更新。

于 2013-09-29T17:21:13.733 回答