小智 7
在我的客户端代码中,我检查是否存在errors属性并根据需要做出反应.
例如,我使用的是Collection.create函数,如果请求成功,它会调用Collection的add函数.因此,我覆盖了我的Collection的添加功能,以防止在具有'errors'属性的情况下添加模型,并且如果它不调用"super"方法.
add: function(object, options) {
if (_.isArray(object) || !object.get('errors')) {
Backbone.Collection.prototype.add.call(this, object, options)
}
},
Run Code Online (Sandbox Code Playgroud)
让我的应用程序返回非成功状态代码也会起作用,因为它会阻止运行成功回调.但是,我不喜欢因为提交无效而返回400错误的想法.这是我在非Backbone.js应用程序中从未做过的事情.( "无脊椎动物"?)
4XX状态代码的描述似乎都没有真正符合验证失败的概念.400和403接近,但仍然像它们用于其他用途一样脱落.另一方面,用户实际上并不关心您返回的状态代码; 也许是404.
这真的是你想要编写更多代码服务器端还是客户端.我的应用程序或多或少忽略了验证的结果,并将序列化的记录返回给JSON,无论它是否已保存,因此我选择从这个角度开始工作.
服务器端骨干验证:
服务器端
返回错误数组
客户端
调用model.save时,将"wait:true"作为选项传递:
modelVar.save(data,{ // here be options
wait: true,
success: this.processRequest,
error: this.processErrors
});
Run Code Online (Sandbox Code Playgroud)
更新模型的验证函数以检查错误数组:
validate: function(attrs) {
this.errors = [];
if (attrs.errors && attrs.errors.length > 0) {
for (var key in attrs.errors) {
this.errors.push(attrs.errors[key].errorMessage);
}
}
return _.any(this.errors) ? this.errors : null;
}
Run Code Online (Sandbox Code Playgroud)
结果
如果服务器重新生成[错误],错误回调将运行并且模型不会"更改".
更新:
从版本0.9.10开始,这将不再有效.您应该使用"invalid"事件或使用函数的新options参数model.validate(attributes, options):if (typeof(options.error === 'function')) options.error();
或者也许我应该使用 http 状态。目前我选择了 403 状态来指示服务器端的验证错误。有关状态的更多信息可以在这里找到:http ://restpatterns.org/HTTP_Status_Codes
| 归档时间: |
|
| 查看次数: |
6692 次 |
| 最近记录: |