Twoje zdanie początkowe było właściwie bardzo dobrym stwierdzeniem różnic między Backbone.js i jQuery, więc rozpakujmy to trochę.
Po pierwsze, obie biblioteki wcale nie konkurują - są komplementarne.
Jako przykład, oto kilka rzeczy, które zrobiłbym z jQuery:
- Animowane pokazy slajdów
- Ulepszenia kontroli formularzy, np. „Pokrętło” liczb w stylu iOS
- Przełączanie widoczności elementów na podstawie nazwy klasy
I kilka rzeczy, które mogę zrobić w Backbone.js:
- Utwórz album ze zdjęciami, w którym użytkownik klika miniaturę i może wyświetlić większą wersję zdjęcia wraz z niektórymi danymi, takimi jak używany aparat, lokalizacja i nazwisko fotografa
- Zbuduj stronę typu wzorzec / szczegóły, która prezentuje siatkę danych i umożliwia użytkownikowi klikanie poszczególnych elementów i aktualizowanie ich w formularzu.
jQuery wyróżnia się na poziomie mikro - wybierając elementy strony, niwelując różnice w sposobie obsługi zdarzeń przez przeglądarki.
Backbone.js to szerszy obraz. Pomaga w zarządzaniu danymi i logiką aplikacji. W powyższym przykładzie albumu ze zdjęciami Backbone zapewnia kilka przydatnych struktur: miałbyś coś, co zawierałoby wszystkie dane związane ze zdjęciami (model), listę wszystkich zdjęć w albumie (kolekcja) i miejsce do umieszczenia logika określająca, co się stanie, gdy użytkownik kliknie miniaturę (widok). To są główne elementy kontrolki lub aplikacji Backbone.
Backbone.js korzysta jednak z jQuery lub czegoś podobnego, aby pomóc w renderowaniu wyników danych i logiki aplikacji do DOM. Na przykład często używa się jQuery do wybierania elementu na stronie, który będzie służył jako kontener dla aplikacji Backbone. Często używa się także jQuery $(function () {});
do odpalania elementów kontrolki Backbone. Prawdopodobnie wyświetliłbyś również komunikaty o błędach walidacji pól formularza z jQuery.
Z pewnością w jQuery można budować duże, złożone interfejsy użytkownika. Mamy kilka w aplikacji, którą utrzymuję w pracy. Jednak trudno jest z nimi pracować, ponieważ jQuery nie jest przeznaczony do zapewniania struktury aplikacji. W szczególności API jQuery, które opiera się na wybieraniu grup elementów, a następnie przekazywaniu funkcji zwrotnych, które manipulują tymi elementami, nie jest dobrym wzorcem do użycia w dużej, złożonej kontrolce lub aplikacji. Otrzymujesz wiele zagnieżdżonych funkcji i bardzo trudno jest zobaczyć, co się dzieje.
Obecnie przerabiam jedną z tych kontrolek w Backbone.js. Jako ostatni przykład, oto krótkie podsumowanie tego, jak mój proces myślowy różni się podczas pracy nad tym samym formantem w obu różnych bibliotekach.
W jQuery martwię się o:
- Czy używam prawego selektora, aby pobrać grupę
li
elementów, które chcę?
- Czy muszę ponownie wypełnić tę listę wartości po zakończeniu tego wywołania Ajax?
- Jak mogę umieścić te wartości tablicowe z powrotem w
input
elementach na stronie?
W Backbone bardziej skupiam się na:
- Jaka jest prawidłowa logika sprawdzania tego zestawu właściwości w elemencie modelu?
- Kiedy użytkownik kliknie przycisk Dodaj, czy powinienem natychmiast dodać nowy element do kolekcji, czy powinienem zaczekać, aż wypełnią wszystkie dane i będą „prawidłowe”?
- Jak powinien reagować element w mojej kolekcji, gdy element bezpośrednio przed lub po usunięciu?
jQuery obsługuje najdrobniejsze szczegóły, a Backbone jest bardziej zaawansowany.
Na zakończenie zauważ, że podczas omawiania przykładów Backbone.js użyłem słów „kontrola” i „aplikacja”. Nie jest prawdą, że Backbone.js jest przeznaczony tylko dla aplikacji jednostronicowych. Prawdą jest jednak, że Backbone.js jest dobry do tworzenia złożonych aplikacji, które manipulują danymi i obsługują wiele logiki. Głupio byłoby używać go do elementów interfejsu użytkownika na małą skalę - dodatkowa struktura, którą narzuca, nie jest potrzebna.
Aktualizacja: jeśli chodzi o problem wielu stron, tak, Backbone zapewnia potężny mechanizm utrwalania danych. Każdy model ma save
metodę, która wykona wywołanie AJAX w celu zapisania zmian na serwerze. Tak długo, jak długo zapisujesz swoje dane, możesz mieć aplikację wielostronicową. To bardzo elastyczny model i prawdopodobnie w ten sposób będziemy używać Backbone w pracy. Chociaż chciałbym stworzyć aplikację jednostronicową, mamy 10 lat pracy nad naszą istniejącą aplikacją wielostronicową. Chcemy odbudować niektóre z naszych bardziej zaawansowanych komponentów interfejsu użytkownika w Backbone, a następnie zsynchronizować zmiany z serwerem, zanim użytkownik przejdzie na inną stronę.