Ваше вступне речення насправді було дуже гарним викладом відмінностей між Backbone.js та jQuery, тож давайте трохи розпакуємо його.
З одного боку, дві бібліотеки взагалі не конкурують - вони безкоштовні.
Як приклад, ось кілька речей, які я б зробив з jQuery:
- Анімовані слайд-шоу
- Удосконалення керування формою, наприклад номер "спінер" у стилі 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 - більш високий рівень.
На закінчення зауважте, що під час обговорення прикладів Backbone.js я використовував слова "control" та "app". Неправда, що Backbone.js призначений лише для односторінкових додатків. Однак правда, що Backbone.js хороший для створення складних додатків, які обробляють дані та обробляють багато логіки. Було б безглуздо використовувати його для дрібних елементів інтерфейсу - додаткова структура, яку він нав'язує, не потрібна.
Оновлення: Так, щодо кількох сторінок, Backbone надає потужний механізм збереження ваших даних. Кожна модель має save
метод, який виконує виклик AJAX для збереження змін на сервері. Отже, доки ви зберігаєте свої дані, ви можете мати багатосторінковий додаток. Це дуже гнучка модель, і саме таким чином ми, мабуть, закінчимо використовувати Backbone на роботі. Хоча я хотів би створити односторінковий додаток, у нас є 10 років роботи в нашій існуючій багатосторінковій програмі. Ми прагнемо відновити деякі наші більш інтенсивні компоненти інтерфейсу користувача в Backbone, а потім синхронізувати зміни з сервером, перш ніж користувач перейде на іншу сторінку.