Автор оригинала: Yuriy Linnyk.
Почему backbone?
Backbone – это легкая библиотека для организации вашего кода в объектно-ориентированном стиле. Если вы привыкли его сделать с jQuery, вам иногда бы трудно найти код, когда это что-то за пределами тривиального. Позвоночник до спасения!
Интеграция с jQuery
Босина зависит от jQuery, чтобы запросить и манипулировать элементами DOM в вашем приложении. Для многих разработчиков, которые означает возможность принять очень знакомые шаги, чтобы сделать вещи в вашем приложении.
Возможно, вы знаете о хорошей практике, чтобы сохранить объект jQuery с ссылками элементов DOM к переменной, особенно если вы собираетесь работать с тем же набором элементов более одного раза:
var $submenu = $('nav .submenu'); /* <- save the `ul` element, so that the browser doesn't have to do the work of finding it again */ $submenu.toggle(); /* <- use the previously found element */
С помощью позвоночника вы поймете еще один шаг и используете объект View, чтобы сохранить ссылку на элемент DOM:
var submenu = new Backbone.View({ el: 'nav .submenu' }); submenu.$el.toggle();
Здесь есть несколько вещей:
- Использовать
Backbone.View
Прототип для создания нового экземпляра объекта ( Как это работает? ) - Передайте объект с вариантами конструктора
Эль
Опция может быть селекторной строкой. Backbone будет использовать jQuery, чтобы найти элемент.- Созданный
подменю
Объект имеет$ EL
Собственность, который является объектом jQuery, так что вы можете позвонить любым Методы jQuery в теме.
Теперь зачем идти все проблемы создания объекта с $ EL
Свойство, когда вы можете просто создать переменную, как в первом примере? Потому что это когда начинается объектно-ориентированное программирование, которое поможет понять, писать и поддерживать свое приложение намного больше.
Backbone.view.view.view.
Вы на самом деле будете использовать Backbone.View
Чтобы создать свои собственные типы элементов, которые будут иметь свои собственные шаблоны, логику и взаимодействие, общие между всеми элементами конкретного прототипа просмотра.
var UserView = Backbone.View.extend({}); var joe = new UserView(); joe.$el.appendTo( document.body );
Уведомление:
- Мы использовали
простираться
Способ создать копиюBackbone.View
опытный образец. - Мы могли, но нам не нужно было пройти
Эль
Опция, когда мы создали экземплярUserview.
-
$ EL
Собственность была создана для нас backbone и содержитDiv
Элемент по умолчанию.Div
DOM Element существует только в памяти. - Мы все еще можем использовать все методы jQuery, которые полезны для добавления вновь созданного элемента на страницу в нашем примере.
Прямо сейчас у нас пустое
Прилагается на нашу страницу, которую мы можем видеть только, проверяя страницу. Как мы показываем что-нибудь в этом Div
?
Вид: представьте метод
Встретить .render
Метод:
var UserView = Backbone.View.extend({ render: function(){ this.$el.html( 'Hello, World, I am a user of this app
'); return this; } }); var joe = new UserView(); joe.render().$el.appendTo( document.body );
Уведомление:
- Мы создали
оказывать
Метод, который используется для сохранения логики рендеринга. - Название «Render» – это просто Конвенция, Backbone не вызывает этого метода для вас.
- Вы можете получить доступ к
$ EL
Собственность в методе прототипа сЭто. $ el
- Вы можете использовать любые методы jQuery для манипулирования элементом
- Не забудьте
Верните это
В последней строкеоказывать
сделать цепочку, что мы все научились ценить с jQuery - Наконец не забудьте на самом деле звонить
оказывать
И шаблон будет отображаться в элементе.
Backbone.model.
Итак, теперь у нас есть шаблон, но как мы передаем там данные и имеем фактическое имя пользователя в шаблоне?
Познакомьтесь с моделью – где данные должны храниться и поддерживаться. Модель Prototype представляет собой план для данных, и экземпляры модели являются элементами данных, которые будут следовать за рисунком.
var User = Backbone.Model.extend({ defaults: { name: '', age: 0 } }); var joe = new User({ name: 'Joe', age: 22 });
Уведомление:
- Мы создали
Пользователь
Прототип, продлеваяBackbone.model
Так же, как мы сделали сBackbone.View
Отказ - Мы использовали
по умолчанию
Свойство для установки значений по умолчанию для свойств модели. - В то время как
по умолчанию
Метод не требуется, он поможет документировать, какие свойства будут иметь определенную модель, и определит значения по умолчанию для свойств, которые помогут избежать некоторых ошибок. - Мы создаем экземпляр
Пользователь
Модель и пропустите объект с фактическими данными в конструктор.
Объект Джо
Кроме того, за исключением простого хранения данных, включает некоторые полезные методы и логику, что значительно поможет поддерживать данные в приложении.
Взаимодействие с экземпляром модели.
По крайней мере, вы должны использовать получить
и Установить
Методы для чтения и изменения данных в вашей модели.
console.log( joe.get('name') ); joe.set({ age: 23 });
- Использовать
получить
Способ для чтения значения свойства. - Передайте объект с ключами и значениями, которые должны быть изменены на
Установить
метод.
Модель и вид вместе
Теперь, когда мы знаем, какая модель выглядит как модель, пришло время использовать его вместе с целью рендеринга фактических данных на странице.
Прямо на данный момент важно помнить, что данные никогда не должны знать о том, как она отображается. Мы передам модель модели к представлению, и представление будет владеть объектом модели как свой собственность, прочитает данные из него и будет разрешено обновлять данные.
var User = Backbone.Model.extend({}); var UserView = Backbone.View.extend({ render: function(){ this.$el.html('Hello, I am ' + this.model.get('name') + '
'); return this; } }); var joe = new User({ name: 'Joe', age: 22 }); // <-- data is stored here var joeView = new UserView({ model: joe }); // <-- passing the model to the view joeView.render().$el.appendTo( document.body ); // <-- render and append to the page
Уведомление:
- При создании
Useview
Экземпляр, мы прошлиМодель
Свойство и экземпляр модели как это значение. - Это делает экземпляр модели доступным как
Модель
Свойство зрения - Как мы используем
Это. $ El
Чтобы добраться до элемента DOM View, мы будем использоватьЭто. Model
чтобы добраться до его данных
Теперь вы можете спросить себя, почему мы должны были создать модель, если бы мы могли просто пройти объект JavaScript с теми же данными на вид? Встретить Backbone.events Отказ
Backbone.Events
Backbone.events Прототип не используется напрямую, но из-за того, что он включен в каждый прототип позвоночника. Он может быть использован в качестве механизма публикации/подписки, средства связи между экземплярами магистралей.
Простой пример:
var joe = new Backbone.Model({ name: 'Joe', age: 22 }); var callback = function(m){ console.log( 'Model changed:', m.toJSON() ); } joe.on('change', callback); // <- subscribe to any change in the model joe.set({ age: 23 }); // make a change, and that will fire the callback
Уведомление:
- Вы можете подписаться на мероприятие в позвоночнике с
на
Метод, доступный в любом экземпляре позвоночника - «Изменить» является одним из Встроенные мероприятия Backbone , который уволен, когда данные модели меняются.
- Модель передается функции обратного вызова в качестве аргумента
- Модель имеет
Тоджсон
Метод , который возвращает объект JavaScript со свойствами и значениями модели. Это верно, это на самом деле не возвращает строку JSON, а объект JavaScript.
Прослушивание изменений данных с вида
var User = Backbone.Model.extend({}); var UserView = Backbone.View.extend({ initialize: function(){ this.listenTo( this.model, 'change', this.render ); }, render: function(){ this.$el.html('Hello, I am ' + this.model.get('name') + '
'); return this; } }); var joe = new User({ name: 'Joe', age: 22 }); var joeView = new UserView({ model: joe }); joeView.render().$el.appendTo( document.body ); joe.set({ age: 23 }); // make a change, view will call render
Уведомление:
Инициализировать
Это специальный метод, который называется, когда создается экземпляр прототипа позвоночника (точно в том, где вы видитеNew
ключевое слово)- Вместо того, чтобы звонить
Model.on
Лучше использоватьView.listento
, что удостоверится, что слушатель остается в объекте, который слушает, а не в том, что излучает события. Это позволяет легко удалить вид сУдалить
Метод, без необходимости беспокоиться о слушателях. - Всякий раз, когда «изменение» событие происходит в экземпляре модели этого конкретного представления,
оказывать
Способ вызывается, который заботится о текущей дате отображается.
Backbone.Collection
Backbone.Collection
это массив на стероидах.
Часто мало имеет смысл создавать экземпляр модели непосредственно из модели. Было бы трудно вручную создавать экземпляры A Пользователь
Модель для каждого Джо
, Алиса
, Карл
и каждый другой пользователь вашего приложения. Намного проще представить, что у вас будет множество пользователей.
Чтобы легко получить модели из массива в ваше приложение, используйте Backbone.Collection
Отказ
var User = Backbone.Model.extend({}); var Users = Backbone.Collection.extend({ model: User }); var users = new Users();
Обратите внимание, как Пользователь
Прототип был передан на Пользователи
опытный образец. Сейчас Пользователи
Коллекция знает, что он собирается содержать предметы Пользователь
модель.
Это означает, что мы можем просто добавить объекты данных в Пользователи
Коллекция, а внутренне позвоночника создаст экземпляры Пользователь
модель.
users.add({ name: 'Joe', age: 22 });
Или добавить массив объектов:
var users_data = [ { name: 'Alice', age: 21 }, { name: 'Carl', age: 31 } ]; users.add( users_data);
Примечание:
- Разум
Пользователи
противПользователи
ОтказПользователи
это прототип коллекции, аПользователи
является экземпляром коллекции, который фактически содержит данные.
Коллекция рендеринга
Backbone.Collection
Содержит все обычные методы для работы с массивом и многое другое. Проходя через коллекцию простой с каждый
Метод:
users.each(function( user ){ var view = new UserView({ model: user }); view.render().$el.appendTo( document.body ); });
Уведомление:
- Функция обратного вызова передана
каждый
Метод ожидается, что будет призван для каждого элемента коллекции. - Обратный вызов будет вызван с экземпляром модели в качестве аргумента.
- Как правило, в рамках функции обратного вызова вы создадите экземпляр соответствующего просмотра, пропускайте текущую модель там, рендерируйте и добавьте вид на желаемый элемент.
Просмотров и домо
Особенно интересно, что легко определить обратные вызовы DOM, которые содержатся в каждом экземпляре представления.
var UserView = Backbone.View.extend({ render: function(){ this.$el.html('Hello, I am ' + this.model.get('name') + '
X'); return this; }, events: { 'click .close': 'remove' } });
Уведомление:
События
Собственность особенная вBackbone.View
Отказ Backbone будет смотреть в это свойство, когда создается новый экземпляр представления, и будет использовать его для определения обратных вызовов для событий DOM, которые будут стрелять в этот конкретный экземпляр.- Каждый
Backbone.View
естьУдалить
Способ, который удалит весь элемент с экрана. - Способ «Удалить» вызывается при нажатии «.Close» элемент, и только один экземпляр
Useview
Будет удален с экрана, другие останутся нетронутыми. - Узнайте больше о том, как определяются события DOM и обратные вызовы: backbonejs.org/#view-events.
Полный пример
Смотрите ручку Lnjomo Юрий Линник ( @yuraji ) на Кодепен
Ваше здоровье
Я надеюсь, что этот быстрый обзор показал вам, насколько это просто начать с BAPBONE и о том, как она простота держит отпуклость, слышал среди самых популярных структур, без серьезных изменений в течение последних лет. Иногда все, что вам нужно, это простой инструмент, который выполняет работу без слишком большого количества за кулисами магии.
Если вы хотели бы узнать больше или обсудить позвоночник и инструмент вокруг него, определенно дайте мне знать.