Backbone.js и jQuery - PullRequest
       20

Backbone.js и jQuery

80 голосов
/ 15 марта 2012

Говорят, что Backbone обрабатывает все абстракции более высокого уровня, в то время как jQuery или аналогичные библиотеки работают с DOM, нормализуют события и т. Д.

Может ли кто-нибудь помочь мне понять это утверждение на каком-нибудь простом практическом примере.

Также одной важной особенностью инфраструктуры MVC, такой как Backbone, Knockout является то, что она поддерживает синхронизацию модели (данных) и представления. Но это кажется специфическим на уровне страницы, а не для всего приложения. Таким образом, мы можем синхронизировать модель / данные и представление на нескольких страницах ... (вид глобальный)

Ответы [ 4 ]

128 голосов
/ 16 марта 2012

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

С одной стороны, две библиотеки вообще не участвуют в конкурсе - они бесплатны.

В качестве примера, вот некоторые вещи, которые я бы сделал с jQuery:

  • Анимированные слайд-шоу
  • Улучшения управления формой, такие как число "spinner" в стиле iOS
  • Переключение видимости элементов на основе имени класса

И некоторые вещи, которые я мог бы сделать в Backbone.js:

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

jQuery выделяется на микроуровне - выбирает элементы страницы, сглаживает различия в том, как браузеры обрабатывают события,

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

Backbone.js использует jQuery или что-то в этом роде, помогая визуализировать результаты данных и логики вашего приложения в DOM.Например, обычно используют jQuery для выбора элемента на странице, который будет служить контейнером для вашего приложения Backbone.Также обычно используют jQuery $(function () {});, чтобы запустить части вашего элемента управления Backbone.Вы, вероятно, также отобразите сообщения об ошибках проверки полей формы с помощью jQuery.

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

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

В jQuery меня беспокоит:

  • Использую ли я правильный селектор, чтобы получить группу нужных элементов li?
  • Нужно ли заново заполнять этот список значений после завершения этого вызова Ajax?
  • Как я могу поместить эти значения массива обратно в элементы input на странице?

В Backbone я больше сосредоточен на:

  • Какова правильная логика для проверки этого набора свойств элемента модели?
  • Когда пользователь нажимает кнопку Добавить, должен ли я сразу добавить новый элемент в коллекцию или подождать, пока они 'заполнены ли все данные и они «действительны»?
  • Как должен реагировать элемент в моей коллекции, когда элемент непосредственно перед или после удаления?

jQuery обрабатывает мельчайшие детали, а Backbone более высокого уровня.

В заключение обратите внимание, что я использовал слова «control» и «app» при обсуждении примеров Backbone.js. Неверно, что Backbone.js предназначен только для одностраничных приложений. Однако это правда, что Backbone.js хорош для создания сложных приложений, которые манипулируют данными и обрабатывают много логики. Было бы глупо использовать его для небольших элементов пользовательского интерфейса - дополнительная структура, которую он налагает, не нужна.

Обновление: В случае нескольких страниц да, Backbone действительно предоставляет мощный механизм для сохранения ваших данных. В каждой модели есть метод save, который будет выполнять вызов AJAX для сохранения изменений на сервере. Поэтому до тех пор, пока вы сохраняете свои данные, у вас может быть многостраничное приложение. Это очень гибкая модель, и именно так мы, вероятно, в конечном итоге будем использовать Backbone на работе. Хотя я хотел бы создать одностраничное приложение, у нас есть 10 лет работы в нашем существующем многостраничном приложении. Мы собираемся перестроить некоторые из наших более интенсивных компонентов пользовательского интерфейса в Backbone, а затем синхронизировать изменения с сервером, прежде чем пользователь перейдет на другую страницу.

54 голосов
/ 15 марта 2012

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

Характеристики типичного магистрального приложения:

  • По существу статическая html-страница, на сервере ничего не генерируется
  • Сервер действует как API REST json, предоставляющий контент для приложения
  • Элементы dom для отображенияданные создаются с помощью javascript в представлениях магистрали, используя jQuery и различные библиотеки шаблонов, чтобы помочь
  • Связь с сервером, а также между различными частями приложения осуществляется через модели магистрали

Что касается вашего вопроса о синхронизации данных на нескольких страницах, мой инстинктивный ответ состоит в том, что вам не нужно несколько страниц: пользователь может почувствовать, что страница меняется, адрес в строке URL изменяется благодаря функции pushState, нотехнически все приложение занимает одну страницу.

Самыми большими преимуществами такого подхода являются удобство работы с пользователем (без перезагрузки страниц), хорошая поддержка кэширования, поскольку все, кроме данных json, является статическим контентом, для мобильных целей - возможность превратить веб-приложение в мобильное приложение сphoneGap (потому что все, кроме json, является статическим).

3 голосов
/ 16 марта 2012

Я никогда не слышал о людях, использующих backbone.js на нескольких страницах. Это почти всегда какое-то одностраничное приложение.

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

Если у вас уже есть серверный рендеринг шаблонов / представлений в java, то backbone.js НЕ для вас. Чтобы получить максимальную отдачу от backbone.js, вы должны переместить или продублировать часть этого кода в javascript внешнего интерфейса.

Если вы не хотите создавать одностраничное приложение (это означает, что приложение не обновляет или не обновляет страницу, но URL-адрес все еще может измениться и выглядеть для пользователя как многостраничный), тогда вы можете оставить все ваш MVC на сервере, и вам не нужна магистраль.

Edit:

Что делает магистраль, так это перемещает некоторые вещи MVC, обычно обрабатываемые на сервере, и передает их клиенту. Для многих это означает, что нужно забыть о сервере и написать свое приложение как одностраничное приложение javascript. Сервер становится просто источником данных JSON / REST. Если вы не готовы сделать это, то backbone.js не так уж полезен.

2 голосов
/ 16 марта 2012

Backbone - это структура MV *, а jQuery - набор инструментов DOM.

Основными функциями приложения MV * являются маршрутизация, привязка данных, шаблоны / представления, модели и доступ к данным.Магистраль может частично зависеть от jQuery.

jQuery - это надежный API для запросов к DOM с широкой поддержкой браузеров и активным сообществом.Он поставляется с обработкой событий, отложенными объектами и анимацией.

Простая привязка событий с использованием jQuery

// When any <p> tag is clicked, we expect to see '<p> was clicked' in the   console.
$( "p" ).on( "click", function() {
console.log( "<p> was clicked" );
});
...