在Backbone.js中,为什么静默更改最终会触发更改事件?

sti*_*man 26 backbone.js backbone-events backbone-model

当我{"silent":true}在Backbone模型中设置属性时通过时,为什么不仅仅抑制change:attribute事件?下次更改属性时触发该事件的优点是什么?

更新

Backbone 0.9.10改变了传递的行为{ "silent": true }.来自更改日志:

传递{silent:true}变化将不再拖延个人"变化:attr"事件,而是完全沉默.

此处浏览更改日志

Edw*_*ith 30

这让我困惑了一段时间.

其原因是{沉默:真正}并不会意味着"一切正常,但就是不触发事件".

根据@jashkenas的各种评论和答案,它似乎意味着"只需更改属性值(并将其添加到'changedAttributes'哈希),但推迟所有其他"与变更相关的"活动,直到以后".

'silent'不会阻止change事件/那些属性,它只是排队'公告'直到下一个change事件被触发.

所以,它可能更好地命名为defer.

相关信息:

https://github.com/documentcloud/backbone/pull/850

"沉默"变化的一点是,从模型的角度来看,它不被认为是一种变化.之后,当实际发生变化时,您可以立即获得全部差异.

https://github.com/documentcloud/backbone/issues/870

因为无声变化的一点是,你可以暂时改变你的模型的内部状态,而不是实际做出改变.稍后,当属性实际更改时,将运行验证并发出事件.在进行静默更改时发出错误事件是没有意义的.

2013年4月7日更新

注意:我没有对此进行测试以确认行为,这只是基于我对发行说明的阅读...

从Backbone 0.9.10开始,上述行为发生了变化.在该版本(和更新版本)中,完全silent:true抑制change:attr事件 - 不仅仅是延迟它们.

http://backbonejs.org/#changelog