当我通过{"silent":true}
而在骨干模型设置一个属性,为什么不只是抑制了change:attribute
的事件吗? 什么是下一次的属性被改变发射该事件的优势在哪里?
更新
骨干0.9.10改变传递的行为{ "silent": true }
。 从更新日志:
传递
{silent:true}
上的变化将不再拖延个人“变化:ATTR”事件,相反,他们是完全沉默。
浏览更改日志这里
当我通过{"silent":true}
而在骨干模型设置一个属性,为什么不只是抑制了change:attribute
的事件吗? 什么是下一次的属性被改变发射该事件的优势在哪里?
更新
骨干0.9.10改变传递的行为{ "silent": true }
。 从更新日志:
传递
{silent:true}
上的变化将不再拖延个人“变化:ATTR”事件,相反,他们是完全沉默。
浏览更改日志这里
这混淆了我一段时间为好。
其原因是{沉默:真正} 并不意味着“一切正常,但就是不触发事件”。
从@jashkenas,它似乎意味着是“简单地更改属性值(并把它添加到‘changedAttributes’散列),但延迟所有其他的‘更改相关’的活动,直到后来的”各种意见和答案。
“沉默”并不妨碍 change
该事件/这些属性,它只是排队的“公告”,直到下一个change
事件被触发。
因此,它可能是更好的名字类似defer
。
相关信息:
https://github.com/documentcloud/backbone/pull/850
“沉默”变化的一点是,它不被视为从型号上来看的变化。 后来,当变化实际发生,你得到充分的差异的一次。
https://github.com/documentcloud/backbone/issues/870
因为沉默改变的一点是,你允许你的模型,暂时的内部状态来摆弄,实际上并没有做任何更改。 后来,当属性实际上改变,验证运行和事件发出。 这是没有意义做沉默变化时发出一个错误事件。
注:我没有测试此确认行为,这只是基于我的发行说明的阅读...
作为骨干0.9.10的,上面描述的行为已经改变。 在该版本(和更新版本), silent:true
抑制change:attr
事件完全是-不只是延迟它们。
http://backbonejs.org/#changelog
在骨干0.9.2的set
函数运行验证更新任何更改之前。
// Run validation.
if (!this._validate(attrs, options)) return false;
在的情况下, {silent: true}
选项传递,验证代码不会被执行。
if (options.silent || !this.validate) return true;
这意味着, model.set({value: 100}, {silent: true});
能够设置“无效”值到模型中,因此属性被更新,但改变事件的不点火。
它是有用的,那么你要更新一些领域,防止整个模式的验证,因此,如果模型尚未完成,改变还是传播到属性。 但通常你也想的视图来显示的变化,所以你必须手动调用model.change()
或model.trigger('change:value', model, value)
。