Tôi có một trang web khá phức tạp với nhiều tab, biểu mẫu, nút radio, trình đơn thả xuống khác nhau. Tất cả đều bị ràng buộc khi sử dụng Knockout.js cho một đối tượng JavaScript rất phức tạp được tải qua cuộc gọi AJAX. Tất nhiên người dùng có thể muck với các công cụ để nội dung trái tim của họ, tại thời điểm đó họ nhấn một nút Lưu để duy trì tất cả các thay đổi của họ trở lại máy chủ.Có cách theo dõi thay đổi tiêu chuẩn nào với trang giới hạn Knockout không?
Tôi đang trong quá trình thiết kế tốt để theo dõi chính xác những gì đã được thay đổi trên trang để tôi có thể thực hiện lưu. Vì vậy, tôi đã đưa ra một vài triển khai có thể.
Tùy chọn 1) Chỉ cần gửi mọi thứ trở lại và để máy chủ phân loại: Với phương pháp này, tôi muốn cho phép Knockout cập nhật nguồn dữ liệu. Nút Lưu sẽ gọi số .toJS()
và gửi dữ liệu đó trở lại máy chủ. Ưu điểm: Rất dễ dàng và tốn rất ít công sức cho khách hàng. Nhược điểm: Máy chủ không thực sự biết những gì đã thay đổi và phải tải dữ liệu từ cơ sở dữ liệu để so sánh hoặc chỉ lưu lại tất cả các trường. Các trường này đến từ nhiều bảng và có quan hệ phức tạp. Nó cũng xử lý toàn bộ tài liệu như một đơn vị nguyên tử duy nhất. Nếu ai đó đã thay đổi Trường A và bạn đã thay đổi trường B, một người dùng sẽ mất thay đổi của họ.
Lựa chọn 2) Sử dụng Javascript để so sánh dữ liệu gốc và dữ liệu hiện tại: Sử dụng kỹ thuật này, khi người dùng nhấp vào nút Lưu, tôi có hệ thống sẽ so sánh các dữ liệu gốc và dữ liệu hiện tại và tạo ra một biểu đồ thay đổi. Ưu điểm: Điều này lý tưởng sẽ dẫn đến một biểu đồ nhỏ gọn về chính xác những gì người dùng đã thay đổi và thậm chí có thể không có op nếu không có gì thay đổi. Nhược điểm: Dữ liệu tôi ràng buộc là phức tạp. Nó bao gồm các chuỗi, mảng, đối tượng, mảng các đối tượng, mảng các đối tượng với các đối tượng khác, vv Tìm kiếm các thay đổi sẽ là một vòng lặp lồng nhau khá phức tạp.
Tùy chọn 3) Theo dõi thay đổi khi chúng được thực hiện trong giao diện người dùng: Tôi sẽ phải quan sát các thay đổi khi chúng xảy ra và giữ nguyên delta làm yếu tố giao diện người dùng thay đổi. Nút Lưu chỉ cần gửi biểu đồ thay đổi đó tới máy chủ nếu có bất kỳ thay đổi đang chờ xử lý nào. Ưu điểm: Không cần so sánh hai đối tượng JavaScript lớn tìm kiếm thay đổi, nhưng vẫn có tất cả lợi ích của tùy chọn 2. Nhược điểm: Loại bỏ không xuất hiện để có cách tiêu chuẩn để nghe mọi thay đổi xử lý sự kiện. Tôi tin rằng tôi sẽ phải sử dụng để ràng buộc với tất cả các yếu tố giao diện người dùng hoặc tạo tùy chỉnh bindingHandlers
trong Knockout để triển khai theo dõi thay đổi theo thời gian thực này.
Câu hỏi của tôi:
Câu hỏi của tôi là chủ yếu cho các chuyên gia Knockout.js. Có cách tiếp cận chuẩn hay các hướng dẫn được đề nghị để giải quyết kịch bản rõ ràng này? Đang gửi lại tất cả dữ liệu, ngay cả những thứ không thay đổi, một thiết kế chung? Hoặc là những người triển khai trình theo dõi thay đổi tùy chỉnh? Knockout có cung cấp bất kỳ loại khung làm giảm yêu cầu này không?
Cập nhật: Tìm thấy this thing, không chắc chắn nếu nó có thể hữu ích hoặc nếu có ai có phản hồi về nó.
Vừa trải qua một điều gì đó rất giống, tôi nghiêng về phía tùy chọn 1. Chúng tôi đã đi tới Tùy chọn 3 và kết thúc bằng đau khổ. Điều khác bạn phải xem xét là nếu người dùng hủy bỏ hoạt động của họ (nếu bạn cho phép điều này)? Bạn phải có một số cơ chế để khôi phục các thay đổi. Với tùy chọn 1, bạn có thể yêu cầu máy chủ cho dữ liệu cũ (hoặc làm điều gì đó sáng tạo hơn, vì điều đó có vẻ quá mức) hoặc bạn có thể sử dụng [protected observable] (http://www.knockmeout.net/2011/03/guard -your-model-accept-or-cancel-edits.html). –