如何使用带有复选框的knockoutjs protected observable?

rho*_*sce 9 javascript knockout.js

我正在使用带有受保护的observable的knockoutjs,并且我遇到了复选框的问题.可以在这里找到受保护的可观察量的一个实现,但是我看到的有几个非常相似.

可以在此处找到演示我的问题的jsFiddle .这是小提琴的一部分.

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());
});
Run Code Online (Sandbox Code Playgroud)

要复制,请执行以下操作:

  1. 运行小提琴(复选框的默认值为true)
  2. 取消选中该复选框
  3. 点击"提交"
  4. 请注意,该值现在显示为false(这是正确的行为)
  5. 再次运行小提琴(复选框的默认值为true)
  6. 取消选中该复选框,然后立即检查(在点击"提交"之前)
  7. 点击"提交"
  8. 即使在您单击"提交"时检查了该值,您也会看到该值将设置为false/unchecked.

第二次更改复选框时,protectedObservable定义中计算的observable中的"write"事件不会被触发,因此当提交值时,它将提交不正确的值.

另请注意,protectedObservable非常适合字符串.任何指导将不胜感激.

And*_*ins 11

protectedObservable实施很老了.它仅适用于旧版本的KO(<2).

对于新的KO版本,请参阅同一作者(Ryan Niemeyer)实施的编辑器模式 - http://www.knockmeout.net/2013/01/simple-editor-pattern-knockout-js.html