私はデータベースに(OKの)コミットされている場合のみ、フォームにデータを保存するように、従属オブザーバブルでcommit()/ peek()タイプの関数を使用する特別な拡張バージョンのKoを使用しています。キャンセル時に元に戻ります。knockoutJsのチェックボックスがチェックされている場合にのみ書き込まれるのはなぜですか?
問題チェックボックスをオンにすると、保護された監視対象に対して書き込み関数が正しく呼び出されるということがあります。ただし、チェックボックスをオフにすると、書き込み関数は呼び出されないので、モデルがMVCコントローラに送信されると、チェックボックスのブール値はTRUEになります。
ノックアウトがFALSE値を書き込まないのはなぜですか? CODE WITH
UPDATED QUESTION:
証明するために、ここでこのJsFiddleをご覧ください。http://jsfiddle.net/b2Qu2/3/
マイナー問題
デモと1つのその他の問題があることに注意してください - について何らかの理由で、チェックボックスをオンまたはオフにすると、依存しているObservableにチェーンされていても、表示された値はUIで更新されません。 'peek'ボタンをクリックして値を覗くことができます。問題を再現するには
大きな問題
:
1) Click 'peek' button: Shows FALSE - CORRECT
2) Check IsAdmin checkbox
3) Click 'peek' again: Shows TRUE - CORRECT
4) Uncheck IsAdmin
5) Click 'peek' again: SHOWS TRUE - INCORRECT!!
シナリオ例
は、ダイアログが管理者ユーザーのためのチェックボックスで示されている想像してみてください。 adminユーザーは1人しか設定できません。管理ユーザーがすでに存在する場合、サーバーは有効/無効で応答します。 ユーザはチェックボックスのチェックを外しますが、今度はviewmodelはチェックボックスが常にtrueと判断しますか? protectedObservableを使用する理由は、サーバーの応答が成功するとcommit()メソッドが呼び出されるため、すべてがUIに保持されます。ユーザーがダイアログをキャンセルするか、エラーが発生した場合、元の値は上書きされません。
あなたのコードの多くを共有することができ、限り、それがバインドされているかのように/使用? –
@RP Niemeyer - いくつかのコードで質問を更新しました。これで苦労します! – jaffa