使用backbone.js和Ruby on Rails进行验证
答
我一直在使用Backbone.validations插件取得了巨大的成功。它允许你像在Rails模型中那样定义你的验证。
var ValidatingModel = Backbone.Model.extend({
validate : {
name : {
required : true,
pattern : /[a-zA-Z]+/,
minlength : 3,
maxlength : 100
},
age : {
type: "number",
min: 0,
max: 200
},
email : {
type: "email"
},
homepage : {
type: "url"
},
occupation : {
in : [
"Lawyer",
"Doctor",
"Professor",
"Economist"
]
}
}
});
答
一种方法是将您的错误处理定位到您通过分配默认错误处理程序来扩展的基本模型中。此错误处理程序应该处理客户端和服务器错误显示。以下是基本模型扩展的样子:
Model = Backbone.Model.extend({
ui: Utils.UI,
initialize: function(attributes, options) {
options || (options = {});
_.bindAll(this, 'defaultErrorHandler');
this.bind("error", this.defaultErrorHandler);
this.init && this.init(attributes, options);
},
// Gets call for failures in validate and for server failures.
defaultErrorHandler: function(model, error) {
var errors;
if (_.isArray(error)) {
errors = error.join('<br/>');
} else {
// Server error; parse as needed into a displayable error.
}
this.ui.showError(errors);
}
});
然后其他模型可以扩展并获得此验证功能。下面是其中包含了客户端验证会话模式:
Session = Model.extend({
validate: function(attrs) {
var errors = []
if (_.isEmpty(attrs.email)) {
errors.push("Email can't be blank");
}
if (_.isEmpty(attrs.password)) {
errors.push("Password can't be blank");
}
return _.any(errors) ? errors : null;
}
});
你也可以处理所有的验证功能,因为它保存之前被调用后保存在那里后,保存它可能被处理错误已经解析出服务器响应。
使用上述方法,您在调用模型的保存功能时无需指定错误函数。它应该由基本功能来处理。
太含糊。给我们更多的信息 – Raynos 2011-06-08 17:10:36