Backbone.View является одним из ключевых компонентов фреймворка Backbone.js, отвечающим за управление пользовательским интерфейсом и связывание данных модели с представлением. Основная задача View — отрисовка элементов на странице и обработка взаимодействия пользователя.
Каждое представление создаётся через конструктор
Backbone.View.extend, который позволяет определить свойства
и методы экземпляра:
var MyView = Backbone.View.extend({
tagName: 'div',
className: 'my-view',
id: 'unique-view',
events: {
'click .button': 'handleClick'
},
initialize: function() {
console.log('View создана');
this.listenTo(this.model, 'change', this.render);
},
render: function() {
this.$el.html('<p>' + this.model.get('text') + '</p>');
return this;
},
handleClick: function() {
console.log('Клик обработан');
}
});
Ключевые моменты:
tagName, className, id —
определяют базовую структуру DOM элемента.events — связывает события DOM с методами View.initialize — выполняется при создании экземпляра, часто
используется для подписки на события модели.render — основной метод для отрисовки интерфейса,
возвращает this для цепочек вызовов.Жизненный цикл Backbone.View можно разделить на несколько этапов:
Создание экземпляра При вызове
new MyView({ model: myModel }) создаётся DOM элемент,
устанавливаются свойства и выполняется метод
initialize.
Привязка к модели и коллекции С помощью
listenTo или this.model.on View подписывается
на изменения модели или коллекции. Это позволяет автоматически обновлять
интерфейс при изменении данных:
this.listenTo(this.model, 'change:name', this.renderName);
render
формирует HTML внутри элемента this.el. Обычно используются
шаблонизаторы или прямое добавление строк HTML через
this.$el.html(). После вызова render DOM можно вставлять на
страницу:$('#container').append(myView.render().el);
Обработка событий События DOM, описанные в
объекте events, автоматически привязываются при создании
View. Они могут быть динамически добавлены и удалены через методы
delegateEvents и undelegateEvents.
Удаление View Метод remove удаляет
DOM элемент и отменяет все слушатели событий, связанных с View:
myView.remove();
Для предотвращения утечек памяти важно всегда использовать
stopListening при ручной отписке от событий:
this.stopListening();
View и модель взаимодействуют через события. Основные события модели:
change — любые изменения модели.change:attribute — изменение конкретного атрибута.destroy — удаление модели.Пример динамического обновления интерфейса при изменении модели:
var user = new Backbone.Model({ name: 'Alice' });
var UserView = Backbone.View.extend({
initialize: function() {
this.listenTo(this.model, 'change:name', this.updateName);
},
updateName: function() {
this.$('.name').text(this.model.get('name'));
},
render: function() {
this.$el.html('<span class="name">' + this.model.get('name') + '</span>');
return this;
}
});
var view = new UserView({ model: user });
$('#app').append(view.render().el);
user.set('name', 'Bob');
View позволяет управлять вложенными элементами с помощью
this.$ — локального селектора для текущего элемента:
this.$('.item').addClass('highlighted');
Методы delegateEvents и undelegateEvents
дают возможность динамически привязывать и отвязывать обработчики
событий без пересоздания View.
Backbone.View поддерживает прототипное наследование, что позволяет создавать иерархию представлений:
var BaseView = Backbone.View.extend({
render: function() {
this.$el.html('<p>Базовый View</p>');
return this;
}
});
var ExtendedView = BaseView.extend({
render: function() {
BaseView.prototype.render.call(this);
this.$el.append('<p>Расширенный View</p>');
return this;
}
});
Такой подход позволяет создавать переиспользуемые компоненты с общим поведением.
Для сложной разметки часто используют шаблонизаторы (Underscore, Handlebars). Пример с Underscore:
var template = _.template('<h1><%= title %></h1><p><%= content %></p>');
var ArticleView = Backbone.View.extend({
render: function() {
this.$el.html(template(this.model.toJSON()));
return this;
}
});
Использование шаблонов упрощает поддержку кода и отделяет логику от представления.
initialize используется для подписки на события.render строит DOM и обновляет интерфейс.events связывают обработку взаимодействий с DOM.remove и stopListening предотвращают
утечки памяти.Эти принципы позволяют создавать масштабируемые и поддерживаемые пользовательские интерфейсы на Backbone.js.