2013-04-12 7 views
9

私はobservableで保護されたknockoutjsを使用していますが、チェックボックスに問題があります。プロテクトされたオブザーバブルの実装はhereですが、私が見たことのあるものは非常に似ています。knockoutjs protected observable with checkboxを使用するには?

私の問題を示す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. を「コミット」あなたは価値があなたが「コミットクリックしたときに、それが確認されたにもかかわらず、偽/チェックなしに設定されます表示されます"

protectedObservable定義の内部計算に観察における「書き込み」イベントが GET値がコミットされたときに、あなたは、このようにチェックボックスを変更し、二度目の発射しない、それは間違った値をコミットしています。

また、protectedObservableは文字列に対して完全に機能することにも注意してください。どんな指針も大変ありがとうございます。

+0

- 新しいKOバージョンの場合

は、同じ著者(ライアン・ニーマイヤー)によって実装エディタパターンを参照してください。だから、私はちょうどコメントとしてこの非常にハックな回避策を投稿します:http://jsfiddle.net/CyHyW/ – nemesv

+0

優秀!レスポンスありがとう! – rhoadsce

+1

'protectedObservable'の実装は非常に古いです。私はKOの古いバージョン(<2)でのみ動作すると思います。新しいKOについては、同じ著者(Ryan Niemeyer)が実装したエディタパターンを参照してください - http://www.knockmeout.net/2013/01/simple-editor-pattern-knockout-js.html –

答えて

関連する問題