Javascript 如何使用带有复选框的knockoutjs受保护的observable?

Javascript 如何使用带有复选框的knockoutjs受保护的observable?,javascript,knockout.js,Javascript,Knockout.js,我正在使用knockoutjs和受保护的observable,我对复选框有问题。可以找到一个受保护的可观察对象的实现,但我看到有几个实现非常相似 可以找到一个演示我的问题的JSFIDLE。这是小提琴的一部分 var ViewModel = function() { var self = this; self.protectedBool = ko.protectedObservable(true); self.commit = function(){ ko

我正在使用knockoutjs和受保护的observable,我对复选框有问题。可以找到一个受保护的可观察对象的实现,但我看到有几个实现非常相似

可以找到一个演示我的问题的JSFIDLE。这是小提琴的一部分

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());
});
要复制,请执行以下操作:

  • 运行小提琴(复选框的默认值为true)
  • 取消选中复选框
  • 单击“提交”
  • 请注意,该值现在显示为false(这是正确的行为)
  • 再次运行小提琴(复选框的默认值为true)
  • 取消选中复选框,然后立即选中(单击“提交”之前)
  • 单击“提交”
  • 您将看到该值将设置为false/unchecked,即使在单击“提交”时已选中该值
  • protectedObservable定义内的computed observable中的“write”事件不会在您第二次更改复选框时触发,因此当提交值时,它提交的值不正确


    还要注意,protectedObservable非常适合字符串。任何指导都将不胜感激。

    受保护的可观察的
    的实现非常陈旧。它适用于旧版本的KO(我还没有一个正确的答案。因此,我只是将这个非常粗糙的解决方法作为一个注释发布:太好了!感谢您的回复!
    protectedObservable
    的实现非常旧。我想它只适用于旧版本的KO(<2)。有关新的KO,请参考同一作者实现的编辑器模式(Ryan Niemeyer)-谢谢,@f_martinez。太好了!@f_martinez你应该把它作为一个答案发布,这样OP就可以接受它,帮助未来的访问者轻松找到答案。