Какова цель backbone.js? - PullRequest
431 голосов
/ 24 марта 2011

Я пытался понять утилиту backbone.js с ее сайта http://documentcloud.github.com/backbone,, но я все еще не мог понять многое.

Может кто-нибудь помочь мне, объяснив, как он работает и как могэто будет полезно в написании лучшего JavaScript?

Ответы [ 15 ]

388 голосов
/ 26 марта 2011

Backbone.js в основном представляет собой сверхлегкий фреймворк, позволяющий структурировать ваш код Javascript в MVC (Model, View, Controller), где ...

Модель является частью вашего кода, который извлекает и заполняет данные,

Представление - это HTML-представление этой модели (представления меняются при изменении моделей и т. Д.)

и необязательный Контроллер , который в этом случае позволяет вам сохранять состояние вашего приложения Javascript через URL-адрес hashbang, например: http://twitter.com/#search?q=backbone.js

Некоторые плюсы, которые я открыл для Backbone:

  • Больше нет Javascript Spaghetti: код организован и разбит на семантически значимые файлы .js, которые впоследствии объединяются с использованием JAMMIT

  • Не более jQuery.data(bla, bla): нет необходимости хранить данные в DOM, вместо этого хранить данные в моделях

  • привязка событий просто работает

  • чрезвычайно полезная библиотека утилит Underscore

  • Код backbone.js хорошо документирован и отлично читается. Открыл глаза на ряд техник кода JS.

Минусы:

  • Мне потребовалось некоторое время, чтобы обернуть вокруг него голову и понять, как применить его к моему коду, но я новичок в Javascript.

Вот несколько замечательных руководств по использованию Backbone с Rails в качестве серверной части:

CloudEdit: руководство по Backbone.js с Rails:

http://www.jamesyu.org/2011/01/27/cloudedit-a-backbone-js-tutorial-by-example/

http://www.jamesyu.org/2011/02/09/backbone.js-tutorial-with-rails-part-2/

p.s. Существует также замечательный класс Collection , который позволяет вам работать с коллекциями моделей и имитировать вложенные модели, но я не хочу с самого начала сбивать вас с толку.

249 голосов
/ 31 августа 2011

Если вы собираетесь создавать сложные пользовательские интерфейсы в браузере, вы, вероятно, в конечном итоге изобрели большинство компонентов, составляющих фреймворки, такие как Backbone.js и Sammy.js.Таким образом, вопрос заключается в том, строите ли вы что-то достаточно сложное в браузере, чтобы заслужить его использование (так что вы сами не придумываете то же самое).

Если то, что вы планируете создать, это то, где пользовательский интерфейсрегулярно меняет способ отображения , но не выходит на сервер, чтобы получить новые страницы целиком , тогда вам, вероятно, понадобится что-то вроде Backbone.js или Sammy.js.Кардинальным примером чего-то подобного является GMail от Google.Если вы когда-либо использовали его, вы заметите, что он загружает один большой кусок HTML, CSS и JavaScript при первом входе в систему, а затем после этого все происходит в фоновом режиме.Он может переключаться между чтением электронной почты и обработкой входящих сообщений, поиском и повторным просмотром всех них, даже не требуя рендеринга целой новой страницы.

Это такое приложение, которое эти платформы превосходно делают для облегченияразвивать.Без них вы либо в конечном итоге соберете воедино разнообразный набор отдельных библиотек, чтобы получить части функциональности (например, jQuery BBQ для управления историей, Events.js для событий и т. Д.), Либо закончите сборку самостоятельно.и необходимость поддерживать и проверять все самостоятельно.Сравните это с чем-то вроде Backbone.js, на котором тысячи людей смотрят его на Github, сотнями вилок, где люди могут работать над ним, и сотнями вопросов, уже заданных и ответивших здесь на Stack Overflow.

Но ни одногоэто имеет какое-то значение, если то, что вы планируете построить, не достаточно сложно, чтобы стоить кривой обучения, связанной с каркасом.Если вы все еще создаете PHP, Java или другие сайты, на которых внутренний сервер все еще выполняет всю тяжелую работу по созданию веб-страниц по запросу пользователя, а JavaScript / jQuery просто мешает этому процессу, вы не 'не нужны или еще не готовы к Backbone.js.

94 голосов
/ 04 июля 2014

Магистраль - это ...

... очень небольшая библиотека компонентов, которую вы можете использовать для организации вашего кода. Он поставляется в виде одного файла JavaScript. Исключая комментарии, он содержит менее 1000 строк реального JavaScript. Это разумно написано, и вы можете прочитать все это за пару часов.

Это интерфейсная библиотека, вы включаете ее в свою веб-страницу с помощью тега script. Он влияет только на браузер и мало говорит о вашем сервере, за исключением того, что в идеале он должен предоставлять спокойный API.

Если у вас есть API, у Backbone есть несколько полезных функций, которые помогут вам поговорить с ним, но вы можете использовать Backbone для добавления интерактивности на любую статическую HTML-страницу.

Магистраль для ...

... добавление структуры в JavaScript.

Поскольку JavaScript не применяет никаких конкретных шаблонов, приложения JavaScript могут очень быстро запутаться. Любой, кто создал что-то помимо тривиального в JavaScript, вероятно, столкнется с такими вопросами, как:

  1. Где я буду хранить мои данные?
  2. Где я буду размещать свои функции?
  3. Как мне соединить мои функции так, чтобы они вызывались разумным образом и не превращались в спагетти?
  4. Как сделать этот код поддерживаемым разными разработчиками?

Backbone стремится ответить на эти вопросы, задав вам:

  • Модели и коллекции, которые помогут вам представлять данные и коллекции данных.
  • Представления, чтобы помочь вам обновить DOM при изменении данных.
  • Система событий, чтобы компоненты могли слушать друг друга. Это сохраняет ваши компоненты разъединенными и предотвращает спагеттификацию.
  • Минимальный набор разумных соглашений, чтобы разработчики могли работать вместе на одной кодовой базе.

Мы называем это паттерном MV *. Модели, виды и дополнительные функции.

Магистраль легкая

Несмотря на первоначальные появления, Backbone фантастически легок, он почти ничего не делает. То, что он делает, очень полезно.

Он дает вам набор маленьких объектов, которые вы можете создавать и которые могут излучать события и слушать друг друга. Например, вы можете создать небольшой объект для представления комментария, а затем небольшой объект commentView для представления отображения комментария в определенном месте в браузере.

Вы можете указать commentView прослушивать комментарий и перерисовывать себя при изменении комментария. Даже если один и тот же комментарий отображается в нескольких местах на вашей странице, все эти представления могут прослушивать одну и ту же модель комментария и синхронизироваться.

Этот способ составления кода помогает избежать запутывания, даже если ваша кодовая база становится очень большой со многими взаимодействиями.

Модель

При запуске обычно данные хранятся либо в глобальной переменной, либо в DOM как атрибуты данных . У обоих из них есть проблемы. Глобальные переменные могут конфликтовать друг с другом и, как правило, имеют плохую форму. Атрибуты данных, хранящиеся в DOM, могут быть только строками, вам придется анализировать их снова и снова. Трудно хранить такие вещи, как массивы, даты или объекты, и анализировать ваши данные в структурированной форме.

Атрибуты данных выглядят так:

<p data-username="derek" data-age="42"></p>

Backbone решает эту проблему, предоставляя объект Model для представления ваших данных и связанные методы . Скажем, у вас есть список задач, у вас будет модель, представляющая каждый элемент в этом списке.

Когда ваша модель обновляется, она запускает событие. Вы можете иметь вид, связанный с этим конкретным объектом. Представление прослушивает события изменения модели и выполняет повторную визуализацию.

Просмотры

Backbone предоставляет вам объекты View, которые общаются с DOM. Все функции, которые управляют DOM или прослушивают события DOM, идут сюда.

Представление обычно реализует функцию рендеринга, которая перерисовывает весь вид или, возможно, часть вида. Нет необходимости реализовывать функцию рендеринга, но это общее соглашение.

Каждое представление привязано к определенной части DOM, поэтому у вас может быть searchFormView, который только слушает форму поиска, и shoppingCartView, который отображает только корзину покупок.

Представления обычно также привязаны к определенным моделям или коллекциям. Когда модель обновляется, она запускает событие, которое прослушивает представление. Представление может вызывать render для перерисовки.

Аналогичным образом, когда вы вводите в форму, ваше представление может обновить объект модели. Любое другое представление, слушающее эту модель, затем будет вызывать свою собственную функцию рендеринга.

Это дает нам четкое разделение проблем, что делает наш код чистым и аккуратным.

Функция рендеринга

Вы можете реализовать свою функцию рендеринга любым удобным для вас способом. Вы можете просто добавить сюда jQuery, чтобы обновить DOM вручную.

Вы также можете скомпилировать шаблон и использовать его. Шаблон - это просто строка с точками вставки. Вы передаете его функции компиляции вместе с объектом JSON и получаете обратно скомпилированную строку, которую вы можете вставить в свой DOM.

Коллекция

У вас также есть доступ к коллекциям, в которых хранятся списки моделей, поэтому todoCollection будет списком моделей todo. Когда коллекция получает или теряет модель, изменяет ее порядок или модель в коллекции обновляется, вся коллекция запускает событие.

Представление может прослушивать коллекцию и обновлять себя при каждом обновлении коллекции.

Вы можете добавить методы сортировки и фильтрации в свою коллекцию и, например, автоматически сортировать ее.

И события, чтобы связать все вместе

Насколько это возможно, компоненты приложения отделены друг от друга. Они общаются с помощью событий, поэтому shoppingCartView может прослушивать коллекцию shoppingCart и перерисовывать себя при добавлении корзины в корзину.

shoppingCartView.listenTo(shoppingCart, "add", shoppingCartView.render);

Конечно, другие объекты также могут прослушивать ShoppingCart и могут выполнять другие действия, такие как обновление итога или сохранение состояния в локальном хранилище.

  • Представления прослушивают Модели и визуализируют при изменении модели.
  • Представления прослушивают коллекции и отображают список (или сетку, или карту и т. Д.) При изменении элемента в коллекции.
  • Модели слушают представления, чтобы они могли изменять состояние, возможно, при редактировании формы.

Разделение ваших объектов таким образом и общение с помощью событий означает, что вы никогда не запутаетесь в узлах, а добавлять новые компоненты и поведение легко. Ваши новые компоненты просто должны прослушивать другие объекты, уже находящиеся в системе.

Условные обозначения

Код, написанный для Backbone, следует свободному набору соглашений. Код DOM принадлежит в представлении. Код коллекции принадлежит коллекции. Бизнес-логика идет в модели. Другой разработчик, подхвативший вашу кодовую базу, сможет взяться за дело.

Подводя итог

Backbone - это легковесная библиотека, которая обеспечивает структуру вашего кода. Компоненты отделены и взаимодействуют через события, чтобы вы не оказались в беспорядке. Вы можете легко расширить свою кодовую базу, просто создав новый объект и сделав так, чтобы он соответствующим образом прослушивал существующие объекты. Ваш код будет чище, приятнее и удобнее в обслуживании.

Моя маленькая книга

Мне так понравился Backbone, что я написал небольшую вступительную книгу об этом. Вы можете прочитать это онлайн здесь: http://nicholasjohnson.com/backbone-book/

Я также разбил материал на короткий онлайн-курс, который вы можете найти здесь: http://www.forwardadvance.com/course/backbone. Вы можете пройти курс примерно за день.

32 голосов
/ 19 апреля 2011

Вот интересная презентация:

Введение в Backbone.js

Подсказка (из слайдов):

  • Рельсы в браузере? Нет .
  • Среда MVC для JavaScript? Сорт .
  • Большой толстый конечный автомат? ДА !
14 голосов
/ 24 марта 2011

JQuery и Mootools - это просто набор инструментов с множеством инструментов вашего проекта. Backbone действует как архитектура или основа для вашего проекта, на котором вы можете создать приложение, используя JQuery или Mootools.

14 голосов
/ 24 марта 2011

Backbone.js - это JavaScript-фреймворк, помогающий организовать ваш код.Это буквально основа, на которой вы строите свое приложение.Он не предоставляет виджеты (такие как jQuery UI или Dojo).

Он предоставляет вам классный набор базовых классов, которые вы можете расширить для создания чистого кода JavaScript, который взаимодействует с конечными точками RESTful на вашем сервере.

11 голосов
/ 13 марта 2013

Я должен признать, что все «преимущества» MVC никогда не делали мою работу проще, быстрее или лучше.Это просто делает весь опыт кодирования более абстрактным и отнимает много времени.Обслуживание - это кошмар, когда кто-то пытается отладить представление о том, что означает разделение.Не знаю, сколько из вас когда-либо пытались обновить сайт FLEX, который использовал Cairngorm в качестве модели MVC, но то, что для обновления может занять 30 секунд, часто может занять более 2 часов (поиск / отслеживание / отладка, чтобы найти одно событие).MVC был и остается для меня «преимуществом», которое вы можете набить.

11 голосов
/ 09 июня 2011

Это довольно хорошее вступительное видео: http://vimeo.com/22685608

Если вы ищете больше о Rails и Backbone, у Thoughtbot есть эта довольно хорошая книга (не бесплатная): https://workshops.thoughtbot.com/backbone-js-on-rails

4 голосов
/ 03 апреля 2013

Вот краткое сообщение о начале работы, которое я написал на BackboneJS. Надеюсь, поможет! http://www.infragistics.com/community/blogs/nanil/archive/2013/04/01/exploring-javascript-mv-frameworks-part-1-hello-backbonejs.aspx

3 голосов
/ 16 ноября 2014

Backbone был создан Джереми Ашкенасом, который также написал CoffeeScript. Как приложение, насыщенное JavaScript, то, что мы теперь знаем как Backbone, отвечало за структурирование приложения в целостную кодовую базу. Underscore.js, единственная зависимость магистрали, также была частью приложения DocumentCloud.

Backbone помогает разработчикам управлять моделью данных в своем клиентском веб-приложении с такой же дисциплиной и структурой , которую вы могли бы получить в традиционной серверной логике приложения.

Дополнительные преимущества использования Backbone.js

  1. См. Backbone как библиотеку, а не как структуру
  2. Javascript теперь организован структурированным образом, модель (MVVM)
  3. Большое сообщество пользователей
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...