2013-04-12 19 views
9

Tôi đang sử dụng knockoutj với bảo vệ có thể quan sát và đang gặp sự cố với hộp kiểm. Một thực hiện các quan sát được bảo vệ có thể được tìm thấy here nhưng có một số mà tôi đã nhìn thấy đó là rất giống nhau.Làm thế nào để sử dụng một knockoutj được bảo vệ có thể quan sát với hộp kiểm?

Một jsFiddle thể hiện sự cố của tôi có thể được tìm thấy here. Đây là một phần của fiddle.

var ViewModel = function() { 
    var self = this; 

    self.protectedBool = ko.protectedObservable(true); 
    self.commit = function(){ 
     ko.commitProtectedObservables(self); 
    }; 
    self.rollback = function() { 
     ko.rollbackProtectedObservables(self); 
    }; 
}; 

$(function() { 
    ko.applyBindings(new ViewModel()); 
}); 

Để nhân bản, làm như sau:

  1. Run fiddle (giá trị mặc định cho hộp kiểm là đúng)
  2. Bỏ chọn hộp kiểm
  3. Bấm "Cam kết"
  4. Lưu ý rằng giá trị hiện tại hiển thị là sai (đây là hành vi chính xác)
  5. Chạy lại fiddle (giá trị mặc định cho hộp kiểm là đúng)
  6. Bỏ chọn hộp kiểm sau đó kiểm tra xem nó ngay lập tức (trước khi bấm "Cam")
  7. Bấm "Cam kết"
  8. Bạn sẽ thấy giá trị sẽ được thiết lập là false/kiểm soát mặc dù nó đã được kiểm tra khi bạn nhấp vào "Commit ".

Các "viết" sự kiện trong quan sát được tính trong định nghĩa protectedObservable không không get bắn lần thứ hai bạn thay đổi vào hộp kiểm và do đó khi giá trị được cam kết, nó cam kết giá trị không chính xác.

Cũng lưu ý rằng các protectedObservable hoạt động hoàn hảo cho chuỗi. Bất kỳ sự hướng dẫn sẽ được đánh giá rất nhiều.

+0

Tôi không có một câu trả lời thích hợp được nêu ra. Vì vậy, tôi chỉ đăng cách giải quyết rất hacky này như một bình luận: http://jsfiddle.net/CyHyW/ – nemesv

+0

Tuyệt vời! Cảm ơn vì sự trả lời! – rhoadsce

+1

'protectedObservable' thực hiện là rất cũ. Tôi đoán nó hoạt động với phiên bản cũ của KO (<2) mà thôi. Đối với KO mới tham khảo mẫu soạn thảo được thực hiện bởi cùng một tác giả (Ryan Niemeyer) - http://www.knockmeout.net/2013/01/simple-editor-pattern-knockout-js.html –

Trả lời

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