gru*_*ler 3 validation backbone.js
我有一个Backbone模型,它带有一个自定义验证方法,可以验证模型属性之一的格式.我的模型连接到一个通过文本字段公开所述属性的视图.视图有一个"保存"按钮,用户必须明确按此按钮才能将模型更改保存回服务器.
当用户键入无效的属性值时,我想在视觉上将该字段标记为处于无效状态.到目前为止,简单 - 我可以将输入字段的change事件绑定到一个函数,该函数调用myModel.set({ attribute: value })并监听"error"模型上的事件以告知验证何时失败,我应该将输入标记为无效.
当我想要处理单击保存按钮时出现问题.因为Backbone.Model.set如果验证失败,中止实际上在模型上设置属性,我的模型将不会准确反映用户输入的值,除非该值有效.当用户在键入无效值后单击"保存"时,我会检查模型是否有效,发现它是否(因为实际上从未设置过无效属性),并将旧的(有效)属性值保存到服务器.
我想要的是一个版本,set它始终发出请求的更改,但仍然会触发验证和事件.set(..., { silent: true })将允许更改通过,但不会运行验证或触发事件.
简而言之 - 我希望我的模型有时存在于无效状态(如果用户输入了无效的属性值),并且我希望能够在有效和无效之间转换时获取事件.是否有一种优雅的方式与骨干做这件事,或者我是否认为这完全错了?
小智 5
我建议你使用这个骨干验证插件https://github.com/thedersen/backbone.validation 非常有帮助.对于您的用例(即使它们无效也允许设置值),您只需要覆盖模型的set函数.
set: function (key, value, options) {
options || (options = {});
options = _.extend(options, { forceUpdate: true });
return Backbone.Model.prototype.set.call(this, key, value, options);
}
Run Code Online (Sandbox Code Playgroud)
backbone.validation的'forceUpdate'属性允许validate方法返回true,同时仍然要求验证.点击保存后,你可以打电话,
var errors = model.validate(model.validate.attributes);
Run Code Online (Sandbox Code Playgroud)
这将返回模型具有的所有错误,您可以正确显示它们.您还可以自由使用有效和无效的回调
| 归档时间: |
|
| 查看次数: |
2630 次 |
| 最近记录: |