Backbone.js предоставляет структурированный подход к организации данных в клиентских веб-приложениях через модели, коллекции и события. Работа с данными строится вокруг Models, Collections и их взаимодействия с сервером через RESTful API.
Модель в Backbone.js представляет собой объект, содержащий данные и бизнес-логику. Основные возможности модели:
Создание модели выполняется через расширение
Backbone.Model:
var Task = Backbone.Model.extend({
defaults: {
title: '',
completed: false
},
validate: function(attrs) {
if (!attrs.title) {
return "Title is required";
}
}
});
Атрибуты модели управляются методами:
get(attribute) — получение значения атрибута.set(attributes, options) — установка значения
атрибута.unset(attribute) — удаление атрибута.toJSON() — получение всех атрибутов модели в виде
объекта.Пример:
var task = new Task();
task.set('title', 'Создать статью');
console.log(task.get('title')); // 'Создать статью'
Метод set может принимать объект с несколькими
атрибутами, а также опции для контроля событий:
task.set({ title: 'Написать документацию', completed: true }, { silent: true });
Опция { silent: true } подавляет вызов событий
change.
Backbone.js использует систему событий для отслеживания изменений данных:
change — вызывается при любом изменении атрибутов.change:attribute — вызывается при изменении конкретного
атрибута.destroy — при удалении модели.Пример привязки событий:
task.on('change:title', function(model, value) {
console.log('Title изменён на:', value);
});
task.set('title', 'Обновлённая задача'); // Событие сработает
Методы fetch, save и destroy
обеспечивают взаимодействие с RESTful API:
fetch() — загрузка данных с сервера.save() — отправка изменений на сервер.destroy() — удаление модели на сервере.Пример:
task.fetch({
success: function(model) {
console.log('Данные загружены', model.toJSON());
},
error: function() {
console.log('Ошибка загрузки данных');
}
});
task.save({ completed: true });
task.destroy();
Коллекции представляют собой упорядоченные наборы моделей. Основные возможности:
Создание коллекции:
var Tasks = Backbone.Collection.extend({
model: Task,
url: '/tasks'
});
add(model) — добавление модели.remove(model) — удаление модели.get(id) — получение модели по идентификатору.at(index) — получение модели по позиции.fetch() — загрузка всех моделей с сервера.Пример добавления и удаления:
var tasks = new Tasks();
tasks.add(task);
tasks.remove(task);
Коллекции поддерживают события:
add — при добавлении модели.remove — при удалении модели.reset — при массовой замене моделей.change — при изменении модели внутри коллекции.Пример:
tasks.on('add', function(model) {
console.log('Добавлена задача:', model.get('title'));
});
Backbone.js предоставляет методы для работы с выборками данных:
filter(predicate) — возвращает массив моделей,
удовлетворяющих условию.findWhere(attrs) — возвращает первую модель с
указанными атрибутами.where(attrs) — возвращает массив моделей с указанными
атрибутами.sort() — сортировка коллекции по определённой функции
comparator.Пример фильтрации:
var completedTasks = tasks.filter(function(task) {
return task.get('completed');
});
Модели и коллекции интегрируются с Views через события. При изменении данных автоматически обновляется интерфейс:
var TaskView = Backbone.View.extend({
initialize: function() {
this.listenTo(this.model, 'change', this.render);
},
render: function() {
this.$el.html(this.model.get('title'));
return this;
}
});
var taskView = new TaskView({ model: task });
taskView.render();
listenTo обеспечивает безопасное управление событиями,
предотвращая утечки памяти.
Backbone использует функцию Backbone.sync для связи с
сервером. По умолчанию она поддерживает CRUD операции:
create — POST для новой модели.read — GET для загрузки модели или коллекции.update — PUT для обновления модели.delete — DELETE для удаления модели.Можно переопределить sync для кастомного взаимодействия
с сервером:
Backbone.sync = function(method, model, options) {
console.log('Метод:', method, 'Модель:', model.toJSON());
// Реализация кастомного запроса
};
Backbone.js предоставляет мощный, но простой механизм работы с данными, где модели обеспечивают инкапсуляцию данных и бизнес-логики, а коллекции управляют набором моделей и массовыми операциями. Использование событийной системы и встроенной синхронизации позволяет создавать динамичные и поддерживаемые веб-приложения.