В основе Backbone.js лежит концепция моделей данных, которые представляют сущности приложения и управляют их состоянием. Модель инкапсулирует данные и предоставляет интерфейс для их изменения, валидации и синхронизации с сервером.
Определение модели осуществляется через расширение
класса Backbone.Model:
var Task = Backbone.Model.extend({
defaults: {
title: '',
completed: false
},
validate: function(attrs) {
if (!attrs.title) {
return "Название задачи не может быть пустым";
}
},
toggle: function() {
this.set('completed', !this.get('completed'));
}
});
defaults задаёт начальные значения атрибутов
модели.validate обеспечивает проверку данных перед их
установкой. Если возвращается строка ошибки, изменения не
применяются.toggle, могут инкапсулировать
бизнес-логику, связанную с сущностью.Создание экземпляра модели:
var task = new Task({ title: 'Изучить Backbone.js' });
При создании модели можно передавать атрибуты, которые заменят значения по умолчанию.
Модель предоставляет методы get и set для
работы с атрибутами:
task.set('completed', true);
console.log(task.get('title')); // "Изучить Backbone.js"
Метод set может принимать объект с несколькими
атрибутами:
task.set({ title: 'Изучить JavaScript', completed: false });
События моделей позволяют реагировать на изменения:
task.on('change:completed', function(model, completed) {
console.log('Статус задачи изменён на', completed);
});
Метод on привязывает обработчик к событию изменения
конкретного атрибута. Можно использовать события change,
destroy, invalid для различных случаев
жизненного цикла модели.
Backbone модели могут автоматически взаимодействовать с сервером
через методы fetch, save и
destroy:
task.save(); // POST или PUT на сервер
task.fetch(); // GET с сервера, обновление атрибутов
task.destroy(); // DELETE на сервере
Методы используют объект url модели для определения
адреса запроса. Можно задать urlRoot или функцию
url, возвращающую динамический путь:
var Task = Backbone.Model.extend({
urlRoot: '/tasks'
});
Методы save и fetch возвращают объект
jqXHR, что позволяет обрабатывать успешные и неуспешные
запросы через .done() и .fail().
Валидация модели запускается автоматически при вызове
set или save. Если данные не проходят
проверку, срабатывает событие invalid:
task.on('invalid', function(model, error) {
console.log('Ошибка валидации:', error);
});
task.set({ title: '' }, { validate: true });
Параметр { validate: true } обязателен, если требуется
выполнить проверку при установке атрибутов.
Модели могут иметь вспомогательные методы для удобного управления состоянием:
var Task = Backbone.Model.extend({
toggle: function() {
this.set('completed', !this.get('completed'));
},
isCompleted: function() {
return this.get('completed');
}
});
task.toggle();
console.log(task.isCompleted()); // true
Такой подход позволяет инкапсулировать логику работы с данными внутри модели, минимизируя дублирование кода.
Модели Backbone.js становятся ядром структуры данных приложения, обеспечивая стабильное, предсказуемое управление состоянием и эффективное взаимодействие с серверной частью.