具有数组/对象属性的主干模型:在sync()之后触发无限'更改'事件?

时间:2013-01-08 20:41:21

标签: backbone.js

我的backbone.js模型有一个数组属性。我将change事件绑定到save()

sync()之后(由save()触发,我的应用服务器返回一个相同的JSON,但是骨干认为数组已被更改(由于我猜对数组的引用不同?),并触发再次改变。然后发生无限循环。

save() -> sync() -> triggered `change` -> save()...

我该怎么办?

想法:我可以将change事件绑定到一个函数,该函数检查更改的属性是否为object / array类型,并进行深度比较并仅在数组/对象确实更改时调用save。如果为真,那么save()

谢谢!

2 个答案:

答案 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});
}

应该这样做。