Backbone.js представляет собой легковесный JavaScript-фреймворк для создания одностраничных приложений, обеспечивающий организацию кода через модели, коллекции, виды и маршрутизаторы. Он не навязывает строгую архитектуру, но предоставляет инструменты для структурирования данных и логики приложения.
Модель в Backbone.js отвечает за управление данными и бизнес-логикой. Каждая модель содержит атрибуты, события и методы для работы с данными.
Создание модели:
var Task = Backbone.Model.extend({
defaults: {
title: '',
completed: false
},
toggle: function() {
this.set('completed', !this.get('completed'));
}
});
Ключевые моменты моделей:
get() и
set() позволяют безопасно работать с атрибутами.change,
destroy, sync позволяют отслеживать изменения
модели.Модели можно сохранять на сервере через save() и удалять
через destroy(). Для работы с REST API Backbone использует
синхронизацию через Backbone.sync.
Коллекции представляют собой упорядоченные наборы моделей. Они предоставляют методы для добавления, удаления, фильтрации и сортировки моделей.
Пример коллекции:
var Tasks = Backbone.Collection.extend({
model: Task,
completed: function() {
return this.filter(function(task) {
return task.get('completed');
});
}
});
Особенности коллекций:
add, remove,
reset) для обновления интерфейса при изменении данных.filter, find,
where) упрощают обработку наборов моделей.fetch().View отвечает за отображение данных модели или коллекции и обработку событий пользовательского интерфейса. Backbone.js использует событийную модель для взаимодействия между представлениями и моделями.
Создание представления:
var TaskView = Backbone.View.extend({
tagName: 'li',
template: _.template($('#task-template').html()),
events: {
'click .toggle': 'toggleCompleted',
'click .delete': 'removeTask'
},
initialize: function() {
this.listenTo(this.model, 'change', this.render);
this.listenTo(this.model, 'destroy', this.remove);
},
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
},
toggleCompleted: function() {
this.model.toggle();
},
removeTask: function() {
this.model.destroy();
}
});
Ключевые принципы работы с View:
tagName, className, id
позволяют задавать структуру DOM.events связывает DOM-события с методами
представления.listenTo обеспечивает реакцию на изменения моделей и
коллекций без утечек памяти.Маршрутизатор Backbone.js обеспечивает управление состоянием приложения через URL. Он позволяет создавать одностраничные приложения с поддержкой истории браузера.
Пример маршрутизатора:
var AppRouter = Backbone.Router.extend({
routes: {
'': 'home',
'tasks/:id': 'showTask'
},
home: function() {
console.log('Главная страница');
},
showTask: function(id) {
console.log('Показ задачи с id:', id);
}
});
Особенности маршрутизации:
routes для определения паттернов URL и
связанных функций.navigate() позволяет программно изменять URL и
запускать обработчики.pushState для современного управления
историей без перезагрузки страницы.События Backbone.js — основной механизм связывания данных и
интерфейса. Все ключевые объекты (Models, Collections, Views) реализуют
Backbone.Events.
Основные методы событий:
on(event, callback) — подписка на событие.off(event, callback) — отписка.trigger(event) — генерация события.Такой подход обеспечивает реактивность без привязки к конкретной библиотеке рендеринга.
Backbone.js удобно работает с серверными данными через REST. Методы моделей и коллекций автоматически выполняют AJAX-запросы:
fetch() — получение данных с сервера.save() — создание или обновление записи на
сервере.destroy() — удаление записи.Можно переопределять url или urlRoot для
кастомных путей и добавлять обработку ошибок через колбэки
success и error.
Backbone.js не навязывает конкретную систему шаблонов. Чаще всего используют Underscore.js для быстрого рендеринга:
var template = _.template('<h1><%= title %></h1>');
var html = template({ title: 'Задача 1' });
<%= %> — вывод с экранированием HTML.<%- %> — вывод без экранирования.<% %> — логика (условия, циклы).Использование шаблонов позволяет отделить логику приложения от представления и повысить читаемость кода.
Backbone.js строит приложение через строгую, но гибкую связку компонентов:
Такой подход обеспечивает высокую модульность и упрощает поддержку больших приложений.
Backbone.js легко расширяется плагинами и сторонними библиотеками:
Использование расширений помогает строить сложные приложения, не теряя простоты и гибкости оригинального фреймворка.