9

保護されたオブザーバブルでノックアウト js を使用しており、チェックボックスに問題があります。保護されたオブザーバブルの 1 つの実装はここにありますが、非常によく似たものがいくつかあります。

私の問題を示す 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());
});

複製するには、次の手順を実行します。

  1. フィドルを実行します (チェックボックスのデフォルト値は true です)
  2. チェックボックスをオフにします
  3. 「コミット」をクリック
  4. 値が false として表示されるようになったことに注意してください (これは正しい動作です)。
  5. フィドルを再度実行します (チェックボックスのデフォルト値は true です)。
  6. チェックボックスをオフにして、すぐにオンにします ([コミット] をクリックする前に)。
  7. 「コミット」をクリック
  8. [コミット] をクリックしたときに値がチェックされていたにもかかわらず、値が false/unchecked に設定されていることがわかります。

protectedObservable 定義内の計算されたオブザーバブルの「書き込み」イベントは、チェックボックスを 2 回目に変更したときに発生しないため、値がコミットされると、間違った値がコミットされます。

また、protectedObservable は文字列に対して完全に機能することにも注意してください。ガイダンスをいただければ幸いです。

4

1 に答える 1