我的backbone.js模型有一个数组属性。我将change
事件绑定到save()
。
在sync()
之后(由save()
触发,我的应用服务器返回一个相同的JSON,但是骨干认为数组已被更改(由于我猜对数组的引用不同?),并触发再次改变。然后发生无限循环。
save() -> sync() -> triggered `change` -> save()...
我该怎么办?
想法:我可以将change事件绑定到一个函数,该函数检查更改的属性是否为object / array类型,并进行深度比较并仅在数组/对象确实更改时调用save。如果为真,那么save()
?
谢谢!
答案 0 :(得分:1)
尝试使用Backbone(主分支)的Edge版本,这种行为在0.9.9之后发生了变化 - 请参阅https://github.com/documentcloud/backbone/pull/2004
答案 1 :(得分:0)
Backbone在许多方法上都有一个特殊选项来防止出现这种问题:silent:true
。如果您将该选项传递给save
方法,则生成的sync
不会触发更改事件。
因此,如果要将更改事件处理程序设置为静默保存,请执行以下操作:
changeHandler: function() {
this.save({silent:true});
}
应该这样做。