#ruby-on-rails #validation #backbone.js #client-side-validation
#ruby-on-rails #проверка #backbone.js #проверка на стороне клиента
Вопрос:
Есть ли у кого-нибудь какие-либо советы или примеры для выполнения проверки с backbone.js и ruby on rails 2.x или 3.x?
Комментарии:
1. Слишком расплывчато. Дайте нам больше информации
Ответ №1:
Один из подходов заключается в размещении вашей обработки ошибок в базовой модели, которую вы расширяете, назначая обработчик ошибок по умолчанию. Этот обработчик ошибок должен обрабатывать отображение ошибок как на стороне клиента, так и на сервере. Вот как может выглядеть расширение базовой модели:
Model = Backbone.Model.extend({
ui: Utils.UI,
initialize: function(attributes, options) {
options || (options = {});
_.bindAll(this, 'defaultErrorHandler');
this.bind("error", this.defaultErrorHandler);
this.init amp;amp; 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;
}
});
Вы также могли бы обработать все это в функции validate, поскольку она вызывается перед сохранением и после сохранения, где после сохранения она может иметь дело с ошибками, которые были проанализированы из ответа сервера.
Используя описанный выше подход, вам не нужно указывать функцию ошибки при вызове функции сохранения модели. Это должно обрабатываться базовой функциональностью.
Ответ №2:
Я с большим успехом использую плагин 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"
]
}
}
});