保護されたオブザーバブルでノックアウト 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());
});
複製するには、次の手順を実行します。
- フィドルを実行します (チェックボックスのデフォルト値は true です)
- チェックボックスをオフにします
- 「コミット」をクリック
- 値が false として表示されるようになったことに注意してください (これは正しい動作です)。
- フィドルを再度実行します (チェックボックスのデフォルト値は true です)。
- チェックボックスをオフにして、すぐにオンにします ([コミット] をクリックする前に)。
- 「コミット」をクリック
- [コミット] をクリックしたときに値がチェックされていたにもかかわらず、値が false/unchecked に設定されていることがわかります。
protectedObservable 定義内の計算されたオブザーバブルの「書き込み」イベントは、チェックボックスを 2 回目に変更したときに発生しないため、値がコミットされると、間違った値がコミットされます。
また、protectedObservable は文字列に対して完全に機能することにも注意してください。ガイダンスをいただければ幸いです。