Tôi đang sử dụng phiên bản mở rộng đặc biệt của Ko sử dụng chức năng loại commit()/peek() trên một người phụ thuộc để tôi chỉ lưu dữ liệu vào biểu mẫu nếu nó được cam kết với cơ sở dữ liệu (trên Ok) và được hoàn nguyên khi hủy.Tại sao hộp kiểm trong knockoutJs chỉ được ghi khi được chọn?
Vấn đề tôi gặp phải là khi tôi chọn hộp kiểm, chức năng ghi được gọi chính xác trên phạm vi được bảo vệ. Tuy nhiên, nếu tôi bỏ chọn hộp kiểm, chức năng ghi không được gọi, vì vậy khi mô hình được gửi tới bộ điều khiển MVC của tôi, hộp kiểm boolean vẫn là TRUE.
Tại sao loại trực tiếp không ghi giá trị FALSE?
CẬP NHẬT CÂU HỎI VỚI Mã sản phẩm:
Xin xem JsFiddle này ở đây để chứng minh: http://jsfiddle.net/b2Qu2/3/
vấn đề nhỏ
Lưu ý rằng có 1 vấn đề khác với bản demo - cho một số lý do, khi tôi kiểm tra/bỏ chọn hộp kiểm, giá trị được nhìn thấy không được cập nhật trên giao diện người dùng mặc dù nó được xích vào một người phụ thuộcKhả thể hỗ trợ. Bạn vẫn có thể nhìn thấy giá trị bằng cách nhấp vào nút 'peek'.
Issue Major
Để tái tạo vấn đề:
1) Click 'peek' button: Shows FALSE - CORRECT
2) Check IsAdmin checkbox
3) Click 'peek' again: Shows TRUE - CORRECT
4) Uncheck IsAdmin
5) Click 'peek' again: SHOWS TRUE - INCORRECT!!
Ví dụ kịch bản
Hãy tưởng tượng một hộp thoại được hiển thị với một hộp kiểm cho người dùng Quản trị. Chỉ có thể đặt 1 người dùng quản trị và máy chủ trả lời hợp lệ/không hợp lệ nếu người dùng quản trị đã tồn tại. Người dùng sau đó bỏ chọn hộp kiểm, nhưng bây giờ viewmodel nghĩ rằng hộp kiểm là luôn luôn đúng ?? Lý do cho việc sử dụng protectedObservable là nếu đáp ứng của máy chủ thành công, phương thức commit() được gọi để mọi thứ được duy trì trên UI. Nếu người dùng hủy bỏ hộp thoại hoặc lỗi xảy ra, các giá trị ban đầu sẽ không bị ghi đè.
Bạn có thể chia sẻ nhiều mã của mình hơn mức độ liên kết/được sử dụng không? –
@RP Niemeyer - Tôi đã cập nhật câu hỏi của mình với một số mã. Đấu tranh với cái này !! – jaffa