0

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

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

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

我该怎么办?

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

谢谢!

4

2 回答 2

1

尝试 Edge 版本的 Backbone(主分支),这种行为在 0.9.9 之后发生了变化 - 请参阅https://github.com/documentcloud/backbone/pull/2004

于 2013-01-08T23:54:14.697 回答
0

Backbone 在许多方法上都有一个特殊选项来防止此类问题:silent:true. 如果您将该选项传递给您的save方法,则结果sync不会触发更改事件。

因此,如果您想将更改事件处理程序设置为静默保存,例如:

changeHandler: function() {
    this.save({silent:true});
}

应该做的伎俩。

于 2013-01-08T20:50:39.617 回答