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

时间:2013-04-12 20:46:47

标签: javascript knockout.js

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

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

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());
});

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

  1. 运行小提琴(复选框的默认值为true)
  2. 取消选中复选框
  3. 点击“提交”
  4. 请注意,该值现在显示为false(这是正确的行为)
  5. 再次运行小提琴(复选框的默认值为true)
  6. 取消选中该复选框,然后立即检查(点击“提交”之前)
  7. 点击“提交”
  8. 即使在您点击“提交”时检查了该值,您也会看到该值设置为false / unchecked。
  9. 在protectedObservable定义中计算的observable中的“write”事件在第二次更改复选框时会触发 not ,因此当提交值时,它提交的值不正确。

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

1 个答案:

答案 0 :(得分:11)

protectedObservable的实施非常陈旧。它适用于旧版本的KO(< 2)。

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