Xương sống là ...
... Một thư viện các thành phần rất nhỏ mà bạn có thể sử dụng để giúp tổ chức mã của mình. Nó được đóng gói dưới dạng một tệp JavaScript. Không bao gồm các nhận xét, nó có ít hơn 1000 dòng JavaScript thực tế. Nó được viết một cách hợp lý và bạn có thể đọc toàn bộ trong vài giờ.
Đó là một thư viện mặt trước, bạn đưa nó vào trang web của bạn với một thẻ script. Nó chỉ ảnh hưởng đến trình duyệt và nói rất ít về máy chủ của bạn, ngoại trừ việc nó lý tưởng nhất là phơi bày một API yên tĩnh.
Nếu bạn có API, Backbone có một vài tính năng hữu ích sẽ giúp bạn nói chuyện với nó, nhưng bạn có thể sử dụng Backbone để thêm tính tương tác vào bất kỳ trang HTML tĩnh nào.
Xương sống là dành cho ...
... thêm cấu trúc vào JavaScript.
Vì JavaScript không thực thi bất kỳ mẫu cụ thể nào, các ứng dụng JavaScript có thể trở nên rất lộn xộn rất nhanh. Bất cứ ai đã xây dựng một cái gì đó vượt quá tầm thường trong JavaScript đều có thể gặp phải các câu hỏi như:
- Tôi sẽ lưu trữ dữ liệu của mình ở đâu?
- Tôi sẽ đặt chức năng của mình ở đâu?
- Làm thế nào tôi kết nối các chức năng của mình lại với nhau, để chúng được gọi theo cách hợp lý và không chuyển sang spaghetti?
- Làm thế nào tôi có thể làm cho mã này được duy trì bởi các nhà phát triển khác nhau?
Xương sống tìm cách trả lời những câu hỏi này bằng cách cho bạn:
- Mô hình và Bộ sưu tập để giúp bạn trình bày dữ liệu và bộ sưu tập dữ liệu.
- Lượt xem, để giúp bạn cập nhật DOM khi dữ liệu của bạn thay đổi.
- Một hệ thống sự kiện để các thành phần có thể lắng nghe nhau. Điều này giữ cho các thành phần của bạn được ghép nối và ngăn ngừa spaghettization.
- Một tập hợp tối thiểu các quy ước hợp lý, để các nhà phát triển có thể làm việc cùng nhau trên cùng một cơ sở mã.
Chúng tôi gọi đây là mô hình MV *. Mô hình, Lượt xem và các tính năng bổ sung tùy chọn.
Xương sống là ánh sáng
Mặc dù xuất hiện ban đầu, Backbone rất nhẹ, nó hầu như không làm gì cả. Những gì nó làm là rất hữu ích.
Nó cung cấp cho bạn một tập hợp các đối tượng nhỏ mà bạn có thể tạo và có thể phát ra các sự kiện và lắng nghe nhau. Bạn có thể tạo một đối tượng nhỏ để thể hiện một nhận xét chẳng hạn, và sau đó một đối tượng bình luận nhỏ để thể hiện sự hiển thị của bình luận ở một vị trí cụ thể trong trình duyệt.
Bạn có thể nói với bình luận Xem lắng nghe bình luận và vẽ lại khi bình luận thay đổi. Ngay cả khi bạn có cùng một nhận xét được hiển thị ở một số nơi trên trang của bạn, tất cả các chế độ xem này có thể nghe cùng một mô hình nhận xét và giữ nguyên trạng thái đồng bộ.
Cách soạn mã này giúp bạn không bị rối ngay cả khi cơ sở mã của bạn trở nên rất lớn với nhiều tương tác.
Mô hình
Khi bắt đầu, việc lưu trữ dữ liệu của bạn trong một biến toàn cục hoặc trong DOM dưới dạng các thuộc tính dữ liệu là điều phổ biến . Cả hai đều có vấn đề. Các biến toàn cầu có thể xung đột với nhau và nói chung là dạng xấu. Các thuộc tính dữ liệu được lưu trữ trong DOM chỉ có thể là các chuỗi, bạn sẽ phải phân tích chúng ra và vào lại. Thật khó để lưu trữ những thứ như mảng, ngày tháng hoặc đối tượng và phân tích dữ liệu của bạn ở dạng có cấu trúc.
Các thuộc tính dữ liệu trông như thế này:
<p data-username="derek" data-age="42"></p>
Xương sống giải quyết điều này bằng cách cung cấp một đối tượng Mô hình để thể hiện dữ liệu của bạn và các phương thức liên quan . Giả sử bạn có một danh sách việc cần làm, bạn sẽ có một mô hình đại diện cho từng mục trong danh sách đó.
Khi mô hình của bạn được cập nhật, nó sẽ khởi động một sự kiện. Bạn có thể có một khung nhìn gắn liền với đối tượng cụ thể đó. Khung nhìn lắng nghe các sự kiện thay đổi mô hình và tái hiện chính nó.
Lượt xem
Xương sống cung cấp cho bạn các đối tượng View nói chuyện với DOM. Tất cả các chức năng thao túng DOM hoặc lắng nghe các sự kiện DOM tại đây.
Chế độ xem thường thực hiện chức năng kết xuất để vẽ lại toàn bộ chế độ xem hoặc có thể là một phần của chế độ xem. Không có nghĩa vụ phải thực hiện chức năng kết xuất, nhưng đó là một quy ước chung.
Mỗi chế độ xem được liên kết với một phần cụ thể của DOM, do đó bạn có thể có searchFormView, chỉ nghe biểu mẫu tìm kiếm và shoppingCartView, chỉ hiển thị giỏ hàng.
Lượt xem cũng thường bị ràng buộc với các Mô hình hoặc Bộ sưu tập cụ thể. Khi Model cập nhật, nó sẽ kích hoạt một sự kiện mà khung nhìn lắng nghe. Khung nhìn có thể họ gọi render để vẽ lại chính nó.
Tương tự, khi bạn nhập vào một biểu mẫu, chế độ xem của bạn có thể cập nhật một đối tượng mô hình. Mọi chế độ xem khác khi nghe mô hình đó sẽ gọi chức năng kết xuất của chính nó.
Điều này cho chúng ta một sự tách biệt rõ ràng các mối quan tâm giữ cho mã của chúng ta gọn gàng và ngăn nắp.
Chức năng kết xuất
Bạn có thể thực hiện chức năng kết xuất của mình theo bất kỳ cách nào bạn thấy phù hợp. Bạn có thể chỉ cần đặt một số jQuery vào đây để cập nhật DOM theo cách thủ công.
Bạn cũng có thể biên dịch một mẫu và sử dụng nó. Một mẫu chỉ là một chuỗi với các điểm chèn. Bạn chuyển nó đến một hàm biên dịch cùng với một đối tượng JSON và lấy lại một chuỗi đã biên dịch mà bạn có thể chèn vào DOM của mình.
Bộ sưu tập
Bạn cũng có quyền truy cập vào các bộ sưu tập lưu trữ danh sách các mô hình, do đó, một todoCollection sẽ là một danh sách các mô hình việc cần làm. Khi một bộ sưu tập tăng hoặc giảm một mô hình, thay đổi thứ tự của nó hoặc một mô hình trong một bộ sưu tập cập nhật, toàn bộ bộ sưu tập sẽ kích hoạt một sự kiện.
Một khung nhìn có thể nghe một bộ sưu tập và tự cập nhật bất cứ khi nào bộ sưu tập cập nhật.
Bạn có thể thêm các phương thức sắp xếp và lọc vào bộ sưu tập của mình và làm cho nó tự động sắp xếp nó chẳng hạn.
Và các sự kiện để gắn kết tất cả lại với nhau
Càng nhiều càng tốt, các thành phần ứng dụng được tách rời nhau. Họ giao tiếp bằng các sự kiện, do đó, shoppingCartView có thể lắng nghe bộ sưu tập shoppingCart và tự vẽ lại khi giỏ hàng được thêm vào.
shoppingCartView.listenTo(shoppingCart, "add", shoppingCartView.render);
Tất nhiên, các đối tượng khác cũng có thể đang lắng nghe shoppingCart và có thể thực hiện những việc khác như cập nhật tổng số hoặc lưu trạng thái trong bộ nhớ cục bộ.
- Lượt xem lắng nghe Mô hình và kết xuất khi mô hình thay đổi.
- Lượt xem lắng nghe các bộ sưu tập và hiển thị danh sách (hoặc lưới hoặc bản đồ, v.v.) khi một mục trong bộ sưu tập thay đổi.
- Các mô hình lắng nghe Chế độ xem để họ có thể thay đổi trạng thái, có thể khi một biểu mẫu được chỉnh sửa.
Việc tách các đối tượng của bạn như thế này và liên lạc bằng các sự kiện có nghĩa là bạn sẽ không bao giờ bị vướng vào các nút thắt, và việc thêm các thành phần và hành vi mới là dễ dàng. Các thành phần mới của bạn chỉ cần lắng nghe các đối tượng khác đã có trong hệ thống.
Công ước
Mã được viết cho Backbone tuân theo một tập hợp các quy ước lỏng lẻo. Mã DOM thuộc về Chế độ xem. Mã bộ sưu tập thuộc về Bộ sưu tập. Logic kinh doanh đi theo một mô hình. Một nhà phát triển khác chọn codebase của bạn sẽ có thể bắt đầu chạy.
Tóm lại
Xương sống là một thư viện nhẹ cho vay cấu trúc mã của bạn. Các thành phần được tách rời và liên lạc qua các sự kiện để bạn không gặp rắc rối. Bạn có thể mở rộng cơ sở mã của mình một cách dễ dàng, chỉ bằng cách tạo một đối tượng mới và để nó lắng nghe các đối tượng hiện có của bạn một cách thích hợp. Mã của bạn sẽ sạch hơn, đẹp hơn và dễ bảo trì hơn.
Cuốn sách nhỏ của tôi
Tôi thích Backbone đến nỗi tôi đã viết một cuốn sách giới thiệu nhỏ về nó. Bạn có thể đọc nó trực tuyến tại đây: http://nicholasjohnson.com/backbone-book/
Tôi cũng đã chia tài liệu thành một khóa học trực tuyến ngắn, bạn có thể tìm thấy ở đây: http://www.forwardadvance.com/cference/backbone . Bạn có thể hoàn thành khóa học trong khoảng một ngày.