Backbone.js — это легковесный JavaScript-фреймворк, предназначенный
для структурирования клиентских приложений. Он основывается на модели
MVC (Model-View-Controller), хотя в классическом понимании MVC Backbone
реализует скорее MV* (Model-View-*), где Controller заменён
на роутер или бизнес-логику, встроенную в объекты.
Ключевые компоненты Backbone.js:
Модель Backbone.js — это основной строительный блок приложения.
Каждая модель содержит атрибуты, которые можно получать
через get и изменять через set. Модели
поддерживают методы:
fetch() — загрузка данных с сервера.save() — сохранение изменений на сервер.destroy() — удаление модели с сервера.toJSON() — преобразование атрибутов в JSON-формат для
передачи или отображения.Пример создания модели:
var Task = Backbone.Model.extend({
defaults: {
title: '',
completed: false
},
toggle: function() {
this.set('completed', !this.get('completed'));
}
});
Коллекции позволяют работать с множеством моделей одновременно. Они
поддерживают события add, remove,
reset, что делает их удобными для динамического обновления
интерфейса.
var TaskList = Backbone.Collection.extend({
model: Task,
comparator: 'title'
});
Views управляют DOM и взаимодействуют с моделями. Backbone Views не создают HTML сами по себе, но связывают данные моделей с элементами страницы. Важные свойства Views:
el — DOM-элемент, за которым закреплён view.events — объект, связывающий события DOM с методами
view.initialize — функция, выполняющаяся при создании view,
обычно используется для подписки на события моделей или коллекций.Пример View:
var TaskView = Backbone.View.extend({
tagName: 'li',
template: _.template($('#task-template').html()),
events: {
'click .toggle': 'toggleCompleted',
'click .destroy': 'clear'
},
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();
},
clear: function() {
this.model.destroy();
}
});
Backbone Router позволяет связывать URL с действиями в приложении, что необходимо для SPA. Основные методы:
route(route, name, callback) — связывает путь с
функцией.navigate(fragment, options) — программно изменяет URL и
вызывает роутер.Backbone.history.start() — включает отслеживание
истории браузера и хэшей URL.var AppRouter = Backbone.Router.extend({
routes: {
'tasks/:id': 'showTask',
'*path': 'defaultRoute'
},
showTask: function(id) {
console.log('Показать задачу с ID: ' + id);
},
defaultRoute: function(path) {
console.log('Маршрут по умолчанию', path);
}
});
var router = new AppRouter();
Backbone.history.start();
Backbone Events предоставляет лёгкий способ организации взаимодействия компонентов через подписку на события. Любой объект может расширять функциональность событий:
var obj = {};
_.extend(obj, Backbone.Events);
obj.on('alert', function(msg) {
console.log('Сообщение:', msg);
});
obj.trigger('alert', 'Пример события');
События позволяют минимизировать жёсткие связи между моделями, коллекциями и представлениями, что особенно важно для сложных приложений.
Backbone.js часто используется вместе с библиотеками шаблонов, такими как Underscore.js или Handlebars, для генерации HTML. Также Backbone легко комбинируется с jQuery, что упрощает работу с DOM и AJAX.
Пример шаблона с Underscore:
<script type="text/template" id="task-template">
<label class="<%= completed ? 'done' : '' %>"><%= title %></label>
<button class="destroy">Удалить</button>
</script>
Backbone.js занимает нишу лёгкого структурного фреймворка, который позволяет создавать SPA без сложного стека. Он не навязывает строгую архитектуру и подходит для проектов, где требуется минимальная нагрузка и высокая гибкость. В отличие от более современных фреймворков (React, Vue, Angular), Backbone не фокусируется на реактивном обновлении DOM, предоставляя разработчику полный контроль над представлением и событиями.
Его сильные стороны заключаются в простоте, интегрируемости и возможности постепенного внедрения в существующие приложения без полной переработки кода. Backbone часто используется как база для построения собственных MV*-структур, позволяя комбинировать проверенные решения с современными библиотеками для управления состоянием и шаблонизации.