Ваше вступительное предложение на самом деле было очень хорошим заявлением о различиях между 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, а затем синхронизировать изменения с сервером, прежде чем пользователь перейдет на другую страницу.