关于我在Backbone collection View add not being called with a model
上的另一个问题我是我的模特
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(基于我前几天提到的上述问题的解决方案)。
答案 0 :(得分:0)
如果有任何不在idAttribute中的更改仍在思考 该模型是新的并触发添加
在您的小提琴代码中,您还将集合的“更改”事件绑定到“addAll”函数
this.collection.bind('change', this.addAll);
如果您对此行发表评论,您的代码将按预期运行。
现在它是如何运作的: 当第一次获取函数被调用时,对于具有ip“127.0.0.2”的项目,将触发“add”事件,并且对于具有ip“127.0.0.1”的项目,将触发“change”。当第二次调用fetch函数时,会为两个项触发“change”事件。对于每次连续调用fetch,将触发两个项目的“更改”事件。 (旁注:刷新事件永远不会触发)
您可以编写另一种方法来处理“更改”事件,在该方法中,您可以更新现有的html元素以反映更新。