Backbone.js предоставляет минималистичный каркас для построения структурированных веб-приложений. Для обеспечения корректности данных и их соответствия определённым правилам часто применяется расширение Backbone.Validation, которое интегрируется с моделями и представлениями, добавляя мощные возможности для валидации.
Backbone.Validation — это плагин, расширяющий функциональность моделей Backbone. Он позволяет:
Для подключения Backbone.Validation необходимо подключить скрипт плагина после загрузки Backbone.js и Underscore.js:
<script src="underscore.js"></script>
<script src="backbone.js"></script>
<script src="backbone-validation.js"></script>
После подключения можно расширять модели Backbone валидацией с
помощью метода extend.
Правила валидации задаются в объекте validation,
определяемом в модели:
var User = Backbone.Model.extend({
validation: {
name: {
required: true,
msg: 'Имя обязательно для заполнения'
},
email: [
{
required: true,
msg: 'Email обязателен'
},
{
pattern: 'email',
msg: 'Некорректный формат email'
}
],
age: {
min: 18,
max: 100,
msg: 'Возраст должен быть от 18 до 100 лет'
}
}
});
Ключевые моменты:
required — обязательное поле.pattern — шаблон проверки (например, стандартная
проверка email).min и max — ограничения для числовых
значений.msg — сообщение, которое возвращается при ошибке.Правила могут быть заданы как объект или массив объектов для одного атрибута, что позволяет комбинировать несколько проверок.
Для проверки данных используются методы isValid и
validate.
Пример:
var user = new User();
user.set({name: '', email: 'test@example.com', age: 17});
if (!user.isValid(true)) {
console.log(user.validationError);
}
isValid(true) запускает валидацию для всех
атрибутов и сохраняет ошибки в validationError.validate может быть переопределён для кастомной
логики, но Backbone.Validation упрощает работу, предоставляя
декларативный способ определения правил.Backbone.Validation позволяет легко синхронизировать ошибки с
интерфейсом. Для этого используется метод bind:
var userView = Backbone.View.extend({
initialize: function() {
Backbone.Validation.bind(this);
},
render: function() {
this.$el.html('<input name="name"><span class="error"></span>');
return this;
}
});
Основные возможности интеграции:
valid и invalid:Backbone.Validation.bind(this, {
valid: function(view, attr) {
view.$('[name=' + attr + ']').removeClass('error').next('.error').text('');
},
invalid: function(view, attr, error) {
view.$('[name=' + attr + ']').addClass('error').next('.error').text(error);
}
});
Backbone.Validation поддерживает создание собственных валидаторов
через метод add:
Backbone.Validation.validators.customAge = function(value, attr, customValue, model) {
if (value < customValue) {
return 'Возраст должен быть не меньше ' + customValue;
}
};
Использование кастомного валидатора:
var User = Backbone.Model.extend({
validation: {
age: {
customAge: 21
}
}
});
Backbone.Validation предоставляет возможность глобально управлять поведением валидации:
forceUpdate — позволяет обновлять атрибуты даже при
ошибках.selector — задаёт CSS-селектор для полей формы, где
будут отображаться ошибки.model — указывает модель, для которой привязана
валидация в контексте представления.Backbone.Validation является мощным инструментом для построения устойчивых, корректных и управляемых данных в приложениях Backbone.js. Правильная настройка правил валидации и их интеграция с интерфейсом значительно повышают качество и надёжность приложений.