And*_*rea 5 javascript validation model backbone.js
我在Backbone.js中遇到了模型验证的奇怪行为.
首次创建模型时,如
var foo = new Foo({
bar: 42
});
Run Code Online (Sandbox Code Playgroud)
Backbone调用foo.set()传递作为给定地图的参数{bar: 42},正如从源可以看到的那样.在这样做时,它也会传递选项{silent: true},就像在行中一样
this.set(attributes, {silent : true});
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为silent === true避免触发change事件,这在这种情况下没有意义.
但是出于某种原因,我无法理解,silent === true也会阻止验证 ; 看到线上的来源
if (!options.silent && this.validate && !this._performValidation(attrs, options)) return false;
Run Code Online (Sandbox Code Playgroud)
所以看起来模型在创建时从未经过验证,但它们通常是在某些属性发生变化时.此外,验证的存在与发送change事件的动作密不可分,这是完全正交的.
任何人都可以解释为什么会这样吗?什么是解决这个问题的清洁和面向未来的方法?
我可以手动调用_performValidation,但这有两个缺点:
_performValidation不是API的一部分,也许它将在未来的版本中发生变化.事实上,我认为这是 Backbone.JS 上的一个错误。
GitHub 上有一个未解决的问题:https ://github.com/documentcloud/backbone/issues/870
编辑:在新版本的 Backbone.js 0.9.1 中,您可以使用方法测试模型是否有效isValid(http://backbonejs.org/#Model-isValid)