Tôi đang cố gắng triển khai Ứng dụng một trang dựa trên MVVM và hiện đang sử dụng khung Knockout.js để xử lý phần viewmodel/view của MVVM. Tôi đang bối rối mặc dù, như mọi ví dụ tôi đã nhìn vào để thực hiện Knockout liên quan đến việc tiết kiệm một viewmodel toàn bộ cơ sở dữ liệu. Không phải là những ví dụ này thiếu một "mô hình" bước, nơi viewmodel đồng bộ với mô hình lớp dữ liệu và mô hình không xác nhận/đồng bộ hóa máy chủ.MVVM với Knockout.js
Tôi muốn có nhiều mẫu/lượt xem khác nhau trên mỗi trang với mỗi chế độ xem khác nhau. Một thứ khác mà tôi thấy bị thiếu với knockout.js là đồng bộ hóa một mô hình đơn (không phải dạng xem) trên các khung nhìn khác nhau. Tôi không nghĩ rằng có một viewmodel khổng lồ mà mọi view đều chia sẻ, vì vậy tôi nghĩ rằng mỗi view sẽ có viewmodel riêng nhưng mỗi viewmodel sẽ đồng bộ với các trường chỉ là một vài mô hình ứng dụng cần thiết cho mỗi lượt xem.
Trang tôi đang tìm nạp một mô hình khổng lồ (30 trường, nhiều lớp quan hệ cha/con) và tôi cho rằng tất cả các kiểu xem của tôi đều đồng bộ hóa với mô hình này. Tôi đã nghiên cứu Knockback.js (kết hợp knockout.js và backbone.js) tuy nhiên tôi đã kết thúc viết lại phần lớn các chức năng như tìm nạp, đặt, lưu, vì trang đang nhận dữ liệu từ API (và tôi có thể 't chỉ cần đồng bộ một mô hình toàn bộ qua lại với máy chủ) vì vậy tôi quyết định chống lại nó.
ví dụ trực quan của ứng dụng của tôi:
(mô hình lớp) M | M
(lớp chế độ xem/xem) VM-V | VM-V | VM-V | VM-V
một ví dụ khác
Một mô hình ví dụ sẽ là tài = {firstName: "đầu tiên", lastName: "cuối cùng", ...}
một viewmodel chỉ cần tên đầu tiên, viewmodel khác chỉ cần tên cuối cùng
ViewModelA = {firstName: app.User.firstName()}
ViewModelB = {firstName: app.User.lastName()}
Cách duy nhất để làm điều này để xác định một hệ thống pub/sub cho các thay đổi Model và Viewmodel? Đây có phải là kiến trúc tốt/bền vững không? Tôi có thiếu khái niệm cơ bản ở đây không? Mọi lời khuyên đều được chào đón.
+1 để đề cập đến pub/sub, tôi quên đề cập đến điều đó. – Tyrsius
Trước hết, xin lỗi vì câu trả lời chậm trễ John và @Tysirius, tôi đã đưa vào một dự án khác trong tuần qua. Tôi thực sự thích cấu trúc V/VM được tách riêng mà bạn đang đề xuất. Tôi thích ý tưởng của một mô hình tổng thể bền bỉ bất kể những gì "trang" bạn đang ở trong SPA. Về cơ bản, tôi giải thích rằng tôi có một mô hình có 10 trường (ngay bây giờ là ko.observable()), sau đó nhiều Mô hình Xem đồng bộ với một phần đại diện của mô hình đó (chỉ một vài trường), và "gợn sóng" đang làm việc rực rỡ. –
Vui mừng khi biết nó hoạt động cho bạn. Đó là một mẫu IMO rắn. –