Câu mở đầu của bạn thực sự là một tuyên bố rất hay về sự khác biệt giữa Backbone.js và jQuery, vì vậy hãy giải nén nó một chút.
Thứ nhất, hai thư viện không hề cạnh tranh - chúng miễn phí.
Ví dụ, đây là một số điều tôi sẽ làm với jQuery:
- Trình chiếu hoạt hình
- Các cải tiến kiểm soát biểu mẫu, chẳng hạn như "spinner" số kiểu iOS
- Chuyển đổi khả năng hiển thị của các phần tử dựa trên tên lớp
Và một số điều tôi có thể làm trong Backbone.js:
- Tạo album ảnh, trong đó người dùng nhấp vào hình thu nhỏ và có thể xem phiên bản ảnh lớn hơn, cùng với một số dữ liệu như máy ảnh đã được sử dụng, vị trí và tên của nhiếp ảnh gia
- Xây dựng loại trang chính / chi tiết trình bày lưới dữ liệu và cho phép người dùng nhấp vào các phần tử riêng lẻ và cập nhật chúng trong một biểu mẫu.
jQuery vượt trội ở cấp độ vi mô - lựa chọn các phần tử trang, làm mượt các sự khác biệt trong cách trình duyệt xử lý các sự kiện.
Backbone.js là bức tranh lớn hơn. Nó giúp bạn quản lý dữ liệu và logic ứng dụng. Trong ví dụ về album ảnh ở trên, Backbone cung cấp một số cấu trúc hữu ích: bạn có thứ gì đó để chứa tất cả dữ liệu liên quan đến ảnh (mô hình), danh sách tất cả ảnh trong album (bộ sưu tập) và một nơi nào đó để đặt logic xác định điều gì sẽ xảy ra khi người dùng nhấp vào hình thu nhỏ (chế độ xem). Đó là những phần chính trong một ứng dụng hoặc điều khiển Backbone.
Tuy nhiên, Backbone.js được hưởng lợi từ jQuery, hoặc một cái gì đó tương tự, giúp hiển thị kết quả của dữ liệu và logic ứng dụng của bạn vào DOM. Chẳng hạn, việc sử dụng jQuery để chọn phần tử trên trang sẽ đóng vai trò là vùng chứa cho ứng dụng Backbone của bạn là điều phổ biến. Người ta cũng thường sử dụng jQuery $(function () {});
để kích hoạt các phần của điều khiển Backbone của bạn. Bạn cũng có thể hiển thị thông báo lỗi xác thực trường biểu mẫu với jQuery.
Bạn chắc chắn có thể xây dựng các giao diện người dùng lớn, phức tạp trong jQuery. Chúng tôi có một số trong ứng dụng mà tôi duy trì tại nơi làm việc. Nhưng chúng rất khó làm việc vì jQuery không được thiết kế để cung cấp cấu trúc cho một ứng dụng. Đặc biệt, API của jQuery, dựa trên việc chọn các nhóm mục và sau đó chuyển các hàm gọi lại để thao tác các mục đó, không phải là một mẫu hay để sử dụng trong một ứng dụng hoặc điều khiển lớn, phức tạp. Bạn kết thúc với rất nhiều hàm lồng vào nhau và rất khó để xem điều gì đang xảy ra.
Tôi hiện đang làm lại một trong những điều khiển đó trong Backbone.js. Ví dụ cuối cùng, đây là bản tóm tắt nhanh về quá trình suy nghĩ của tôi khác nhau như thế nào khi làm việc trên cùng một điều khiển trong cả hai thư viện khác nhau.
Trong jQuery, tôi lo lắng về:
- Tôi có đang sử dụng bộ chọn phù hợp để lấy nhóm
li
phần tử tôi muốn không?
- Tôi có cần tạo lại danh sách các giá trị đó khi lệnh gọi Ajax này hoàn tất không?
- Làm cách nào để đặt các giá trị mảng này trở lại các
input
phần tử trên trang?
Trong Backbone, tôi tập trung hơn vào:
- Logic chính xác để xác thực tập hợp các thuộc tính này trên mục mô hình của tôi là gì?
- Khi người dùng nhấp vào nút Thêm, tôi nên thêm một mục mới vào bộ sưu tập ngay lập tức hay tôi nên đợi cho đến khi họ điền vào tất cả dữ liệu và nó "hợp lệ"?
- Một mục trong bộ sưu tập của tôi nên phản hồi như thế nào khi mục đó ngay trước hoặc sau khi bị xóa?
jQuery xử lý các chi tiết phức tạp và Backbone ở mức cao hơn.
Kết lại, hãy lưu ý rằng tôi đã sử dụng các từ "điều khiển" và "ứng dụng" khi thảo luận về các ví dụ của Backbone.js. Không đúng khi Backbone.js chỉ dành cho các ứng dụng trang đơn. Tuy nhiên, đúng là Backbone.js rất tốt để xây dựng các ứng dụng phức tạp thao tác dữ liệu và xử lý nhiều logic. Sẽ thật ngớ ngẩn nếu sử dụng nó cho các phần tử giao diện người dùng quy mô nhỏ - cấu trúc bổ sung mà nó áp đặt là không cần thiết.
Cập nhật: Về vấn đề nhiều trang, vâng, Backbone cung cấp một cơ chế mạnh mẽ để duy trì dữ liệu của bạn. Mỗi mô hình có một save
phương thức sẽ thực hiện lệnh gọi AJAX để lưu trữ các thay đổi trên máy chủ. Vì vậy, miễn là bạn lưu dữ liệu của mình khi bạn di chuyển, bạn có thể có một ứng dụng nhiều trang. Đó là một mô hình rất linh hoạt và đó là cách chúng ta có thể kết thúc việc sử dụng Backbone tại nơi làm việc. Mặc dù tôi rất thích xây dựng ứng dụng một trang, nhưng chúng tôi đã có 10 năm làm việc trong ứng dụng nhiều trang hiện có của mình. Chúng tôi đang tìm cách xây dựng lại một số thành phần giao diện người dùng mạnh mẽ hơn trong Backbone, sau đó đồng bộ hóa các thay đổi với máy chủ trước khi người dùng chuyển sang một trang khác.