2011-06-28 49 views
11

Tôi đang cố gắng chuyển một ứng dụng mvc asp hiện có sang sử dụng knockoutjs (pure js/html) vì tôi không còn thực sự cần bất kỳ chức năng nào trong asp mvc nữa. Tuy nhiên, một vấn đề tôi có thể coi là cách tôi xử lý một số trang của mình.KnockoutJS - Nhiều chế độ xem một phần trong chế độ xem chính?

Tôi có một trang chứa khoảng 12 lượt xem từng phần, mỗi phần có một mô hình riêng. Bây giờ với Knockout JS nó có vẻ như bạn chỉ nên thực sự có 1 viewmodel/xem mỗi trang, tuy nhiên trang tôi có chứa một lượng lớn thông tin, các phần sẽ giống như:

  • Chi tiết khách hàng
  • khách hàng địa chỉ
  • khách hàng Đơn đặt hàng gần đây
  • Thẻ khách hàng
  • Quỹ khách hàng
  • ...

Để làm cho mọi việc trở nên phức tạp hơn nếu một số chi tiết thay đổi một phần, nó cần thay đổi dữ liệu trong phần khác. Vì vậy, cho phép nói rằng bạn loại bỏ một thẻ nó sau đó cần phải nói với các quỹ kiểm soát rằng nó không còn có một thẻ để wont có tiền. (Đây là một ví dụ trừu tượng, nhưng hy vọng minh họa điểm này)

Vì vậy, tôi không chắc chắn làm thế nào để làm điều này trong loại trực tiếp, vì nó sẽ có nó như một mô hình lớn, mà tôi sẽ rất vui khi làm nó chứa ALOT thông tin. Cũng như nhiều biểu mẫu, vì bạn có thể cập nhật địa chỉ của mình mà không phải cập nhật mọi thứ khác.

Vì vậy, tôi có nên tạo một mô hình lớn cho chế độ xem này và chỉ giải quyết nó không? hoặc có cách nào để có quan điểm nói chuyện với nhau không?

+0

Có ai có bất kỳ hướng dẫn phong nha nói chung cho Knockout như tôi tìm thấy tài liệu một chút để ngắn, và chỉ có một số ví dụ nhỏ. Không có gì đáng kể như một ứng dụng demo cho thấy nó hoạt động trên nhiều trang, v.v ... – somemvcperson

+0

Chỉ cần thêm một số bối cảnh vào bit ứng dụng demo, tôi thấy trang web của họ có một vài ví dụ phong nha nhưng chúng dường như chỉ sử dụng dạng xem và xem, không bao giờ là mô hình, vậy mô hình khác này là gì? Nếu không, nó chỉ là VVM ... – somemvcperson

Trả lời

3

Chiến lược của tôi là sử dụng một mô hình chế độ xem lớn. Bất kể bạn đặt nó, quan điểm một phần là khái niệm phía máy chủ và sau khi mọi thứ chuyển sang phía máy khách, nó sẽ là lượng thông tin dữ liệu lớn trong một trang duy nhất.

Tuy nhiên để làm cho mọi thứ dễ quản lý, tôi đảm bảo rằng mọi mã thao tác Javascript được viết ở chế độ xem một phần của riêng nó. Điều này giúp việc theo dõi chức năng và mã tương ứng dễ dàng hơn. Vì vậy, về cơ bản bạn cư trú đối tượng mảng khách hàng chính của bạn trong trang chính và sau đó gọi hàm để điền chi tiết, địa chỉ, vv được xác định tương ứng trong mỗi chế độ xem một phần.

+1

Cảm ơn phản hồi, một điều vẫn còn liên quan đến tôi về một kiểu mẫu lớn là mỗi mô hình trong mô hình lớn hơn (tức là Địa chỉ, Thẻ) được lưu độc lập. Tuy nhiên từ ban đầu của tôi tìm kiếm nó trông giống như bạn vẫn tồn tại toàn bộ mô hình cùng một lúc ... tôi có phải viết bất cứ điều gì tùy chỉnh để làm điều này? hoặc là nó chỉ đơn giản như tiết lộ saveCard (index) saveAddress (index) như là phương thức mà chỉ cần gửi cho máy chủ? – somemvcperson

+0

không thực sự. nếu bạn có các mô hình theo mô hình lớn hơn, bạn chỉ cần đảm bảo rằng bạn tham chiếu chúng một cách chính xác bên trong các chế độ xem một phần, ví dụ: 'Add Card'. Tôi đã không thực sự thử nghiệm rằng mặc dù bởi vì tôi đã kết thúc đưa tất cả mọi thứ trong một mô hình xem duy nhất. không có mô hình bên trong mô hình; không chính xác là một giải pháp tuyệt vời. – neebz

+2

Btw, tôi vừa nhận ra rằng bạn cũng có thể áp dụng nhiều ràng buộc bằng cách đóng gói các khung nhìn một phần của bạn bên trong một div và sau đó gọi 'ko.applyBinding (partialViewModel," id of div ")'. Tham số thứ hai mô tả nơi áp dụng các ràng buộc. – neebz

3

Tôi sẽ cảnh báo chống lại một mô hình xem quái vật vì nó tạo ra một khớp nối chặt chẽ mà bạn sẽ muốn tránh trong các ứng dụng phức tạp.

Giải pháp tốt hơn là xây dựng hệ thống pub/sub ở trên cùng của ko.subscribable. Giao tiếp giữa các mô hình xem sau đó được hỗ trợ bằng cách quản lý các đăng ký cho các sự kiện khác nhau. Đó là một chút công việc trả trước, nhưng nó sẽ trả cổ tức xuống đường.

Here là bài đăng trên blog mở rộng về chủ đề. Tôi rất khuyên bạn nên blog này. Đó là một nguồn tài nguyên tuyệt vời cho những thách thức và chiến lược loại trực tiếp.

Các vấn đề liên quan