12

我正在将我的主干版本从 0.9.2 更新到 1.0,但我遇到了一个问题。

模型未正确更新。它有延迟。以前我下面的代码完美地工作:

this.model({ attrib: true},{silent:true});

但更新后我删除了{silent:true},一切正常。模型正确更新。

我在 Backbonejs.org 上读过类似的内容

在更改上传递 {silent:true} 将不再延迟单个“change:attr”事件,而是完全静音。

我不完全明白该声明的含义。

4

1 回答 1

18

关于您引用的文档的含义:

当您这样做时(我猜这this.model是一个错误)this.set({attr: value}, {silent: true}),所有更改事件都被延迟到下一个非静默更改。也就是说,如果你正在做this.trigger('change')(从 jQuery/Backbone 的最新版本开始,this.change()不再工作)或者this.set('anotherAttr', anotherValue),一个change:attr事件就会被触发。

从 Backbone 1.0 开始,这种行为已经改变。当您使用静默标志时,您不会再延迟change:attr事件,而是将其完全关闭

所以基本上,用一段代码来说明:

myModel.listenTo(myModel, 'change:attr', function() {alert();});
myModel.set('attr', true, {silent: true});
myModel.trigger('change');
// or myModel.set('anotherAttr', true);

将在 Backbone 1.0 之前的版本中发出警报,但在 Backbone 1.0 中不会。

于 2013-04-17T09:25:51.903 回答