Javascript 主干集合.fetch({update:true})不';t比较id add';又是同一型号了
关于我的另一个问题 我有我的模特Javascript 主干集合.fetch({update:true})不';t比较id add';又是同一型号了,javascript,backbone.js,Javascript,Backbone.js,关于我的另一个问题 我有我的模特 var Client = Backbone.Model.extend({ idAttribute: 'ip' }); var Colony = Backbone.Collection.extend({ url: '/presence/knock', model: Client }); 我也试过了 var Client = Backbone.Model.extend({ ipAttribute: function(){
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
。但什么都不管用。似乎主干正在比较整个对象不如果两个对象完全相同,则不会触发添加,但是如果有任何不在idAttribute中的更改,则仍然认为模型是新的,并触发添加
我对使用模拟ajax(基于我几天前提出的上述问题的解决方案)的方法有点不了解
如果有任何变化不在idAttribute中,则仍然认为
该模型是新的,并添加了触发器
在fiddle中的代码中,您还将集合的“change”事件绑定到“addAll”函数
如果对这一行进行注释,代码将按预期工作
下面是它现在的工作原理:
当调用第一个提取函数时,将为ip为“127.0.0.2”的项触发“添加”事件,并为ip为“127.0.0.1”的项触发“更改”。当第二次调用fetch函数时,将为这两个项触发“更改”事件。对于每个连续的获取调用,将为两个项目触发“更改”事件。(旁注:刷新事件根本不触发)
您可以编写另一个方法来处理“更改”事件,并在该方法中更新现有html元素以反映更新。是,对不起。它应该是IDattribute。你能确保你后端的“ip”是唯一的吗?是的,它们是唯一的。你可以在小提琴上看到。使用mockajax
ip
是独一无二的。
this.collection.bind('change', this.addAll);