rails 2.xまたは3.xでbackbone.jsとrubyを使用して検証を行うためのアドバイスや例はありますか?
5912 次
2 に答える
12
1つのアプローチは、デフォルトのエラーハンドラーを割り当てることによって拡張する基本モデルでエラー処理を見つけることです。このエラーハンドラは、クライアント側とサーバーの両方のエラー表示を処理する必要があります。基本モデルの拡張機能は次のようになります。
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;
}
});
保存前と保存後に呼び出されるため、検証関数ですべてを処理することもできます。保存後は、サーバーの応答から解析されたエラーを処理する可能性があります。
上記のアプローチを使用すると、モデルの保存関数を呼び出すときにエラー関数を指定する必要はありません。基本機能で処理する必要があります。
于 2011-06-10T13:11:11.413 に答える
9
私は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"
]
}
}
});
于 2011-11-21T14:31:24.820 に答える