Backbone.js предоставляет мощные средства для управления событиями,
что позволяет строить гибкие и модульные приложения. Основной механизм
работы с событиями в Backbone основан на объекте Events,
который может быть встроен в любые объекты, включая модели, коллекции и
представления (views). Понимание жизненного цикла событий критически
важно для управления состоянием приложения и предотвращения утечек
памяти.
Каждый объект, расширяющий Backbone.Events, получает
методы для подписки, уведомления и отписки от событий:
on(event, callback, [context]) —
подписка на событие. event может содержать несколько
названий через пробел. callback — функция, вызываемая при
возникновении события. context — опционально задаёт
контекст вызова функции.
off([event], [callback], [context])
— отмена подписки. При отсутствии аргументов удаляются все слушатели
объекта.
trigger(event, [...args]) —
генерация события с передачей аргументов.
once(event, callback, [context]) —
подписка на одноразовое событие, которое будет вызвано только один раз и
автоматически удалено после выполнения.
Пример:
var obj = {};
_.extend(obj, Backbone.Events);
obj.on('UPDATE', function(msg) {
console.log('Обновление: ' + msg);
});
obj.trigger('update', 'данные изменены');
Модель Backbone является центральным элементом данных. События модели позволяют отслеживать изменения состояния и реагировать на них.
События изменения атрибутов
change — вызывается при изменении любого атрибута
модели.change:attributeName — вызывается при изменении
конкретного атрибута.var user = new Backbone.Model({name: 'Иван', age: 25});
user.on('change:name', function(model, value) {
console.log('Имя изменено на ' + value);
});
user.se t({name: 'Пётр'});
События синхронизации с сервером
request — перед началом запроса к серверу.sync — после успешного ответа сервера.error — при ошибке запроса.user.on('sync', function() {
console.log('Модель успешно синхронизирована с сервером');
});
user.save();
Коллекции в Backbone предоставляют методы для работы с множеством моделей и управляют событиями добавления, удаления и изменения элементов.
Основные события коллекции:
add — когда модель добавляется в коллекцию.remove — когда модель удаляется из коллекции.reset — когда коллекция полностью заменяется новыми
моделями.sort — после сортировки коллекции.var users = new Backbone.Collection();
users.on('add', function(model) {
console.log('Добавлена модель: ' + model.get('name'));
});
users.add({name: 'Алексей'});
users.on('change:name', function(model, value) {
console.log('Имя модели в коллекции изменилось на ' + value);
});
Представления используют события для реагирования на пользовательский интерфейс и изменения моделей. Backbone предоставляет два механизма: DOM-события и собственные события Backbone.
DOM-события
Определяются в объекте events представления и
автоматически привязываются к элементам DOM, находящимся внутри
el.
var UserView = Backbone.View.extend({
events: {
'click .save-btn': 'saveUser',
'input .name-field': 'updateName'
},
saveUser: function() {
console.log('Сохраняем пользователя');
},
updateName: function(e) {
console.log('Новое имя: ' + e.target.value);
}
});
Backbone-события в представлении
Позволяют подписываться на события моделей и коллекций, поддерживая реактивность интерфейса.
var UserView = Backbone.View.extend({
initialize: function() {
this.listenTo(this.model, 'change', this.render);
},
render: function() {
this.$el.text(this.model.get('name'));
return this;
}
});
Использование listenTo важно для корректного управления
жизненным циклом событий, так как автоматически снимает подписку при
вызове remove() у представления, предотвращая утечки
памяти.
Backbone требует внимательного управления событиями, особенно в крупных приложениях:
Использовать listenTo вместо прямого
on в представлениях. Это позволяет автоматически
снимать слушатели при уничтожении представления.
Вызывать stopListening при удалении
объектов, если подписка осуществлялась напрямую через
on.
var view = new UserView({model: user});
view.remove(); // автоматически снимает все слушатели через listenTo
once для одноразовых
событий, чтобы события не накапливались.События Backbone обеспечивают слабую связанность компонентов. Модели, коллекции и представления могут взаимодействовать через события без жёсткой зависимости друг от друга:
change.listenTo, обновляет
интерфейс.Такой подход формирует реактивную архитектуру и упрощает поддержку приложения.
on и off для явного
управления событиями, listenTo и stopListening
— для представлений.once для одноразовых событий, чтобы
предотвращать накопление слушателей.change:attribute)
для точечного реагирования.request,
sync и error.Жизненный цикл событий Backbone — это инструмент управления состоянием и реактивностью приложения, требующий внимательного подхода к подпискам и отпискам, особенно в сложных интерфейсах.