骨干模型验证
Backbone model validation
我在Backbone.js.中遇到了一个奇怪的模型验证行为
首次创建模型时,如
var foo = new Foo({
bar: 42
});
Backbone调用foo.set()
,将给定的映射{bar: 42}
作为参数传递,正如可以从源代码中看到的那样。在此过程中,它还传递选项{silent: true}
,如行中所示
this.set(attributes, {silent : true});
这是有意义的,因为具有silent === true
可以避免触发change
事件,而这些事件在这种情况下没有意义。
然而,出于某种原因,我无法理解silent === true
也阻止验证;查看线上的来源
if (!options.silent && this.validate && !this._performValidation(attrs, options)) return false;
因此,模型在创建时似乎从未经过验证,但通常在某些属性更改时进行验证。此外,验证的存在与发送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)
到目前为止,保持安全的唯一方法是永远不要传入参数哈希。
我总是这样做:
var m = new MyModel();
// and then I do all the sets
m.set(...);
m.set(...);
m.set(...);
如果一些JSON数据来自数据库,那么它们应该已经过验证,所以在这种情况下,可以:
var m = MyMOdel(hashFromDB);
这有道理吗?
相关文章:
- 如何在不使用mvc 4中的模型的情况下进行客户端验证
- 如何在不通过模型验证的情况下屏蔽文本输入中输入的字符
- 概念验证模型控制器调用正确的实例
- 跳过Sails.js中的模型验证
- 主干.js:为每个模型添加验证
- 骨干模型中的验证
- Kendo UI自定义验证不适用于模板和视图模型
- 根据模型验证,显示弹出消息或视图
- 使用ajax的javascript应用程序的身份验证模型
- 骨干模型验证问题
- Select选项包含在验证模型MVC时不起作用
- 如何在运行验证时保持ng模型值
- 在使用 BackboneJS 模型时验证 ReactJS 输入
- AngularJS 无法自定义验证模型数组值
- 续集模型的客户端模型验证
- 在没有模型的 MVC 3 中进行验证
- 访问 Twitter API - 身份验证和骨干模型
- 如何在 NodeJS 中使用续集设置模型验证
- 骨干js中的验证模型
- js非常简单的验证模型不工作-跟随webtuts教程