0

私の質問は、ノックアウトで計算されたオブザーバブルと同じように設定されていることがわかる限り、それらをクリアすると、2 つのデータバインド入力フィールドが異なる動作をする理由です。

このフィドルの使用: http://jsfiddle.net/ya7eF/167/

「min」フィールドは正しく機能していますが、「hrs」フィールドは機能していません。問題を再現するには、次の手順に従ってください。Duration の「hrs」フィールドからテキストを削除すると、min フィールドのようにぼかしでゼロに置き換えられない理由を理解したいと思います。

  1. 2 番目の Duration ('min') テキスト フィールドからテキスト ('30') を削除し、そのフィールドへのフォーカスを失います。空の文字列はゼロに置き換えられ、他の計算されたオブザーバブル (終了時間) が更新されます。望んだ通りに。
  2. フィドルを再実行します。
  3. Duration 'hrs' テキスト フィールドからテキスト ('0') を削除します
  4. ぼかし「時間」
  5. 何も起こりません; 何時間も計算されたオブザーバブルの「読み取り」メソッドは、呼び出されることさえありません。2 つの観測値の違いがわかりません。
4

1 に答える 1

1

2 番目のケースでは、Durationオブザーバブルの値は実際には変化しませんでした。オブザーバブルの値が現在の値に設定されている場合、通知はサブスクライバーに送信されません。これは、計算されたオブザーバブルの読み取り関数がトリガーされないことを意味します。

この問題に対処する 1 つの手法は、オブザーバブルのvalueHasMutated関数を使用して、通知が確実に送信されるようにすることです。複数の通知を避けるには、次のようにします。

        if (totalMinutes !== self.Duration()) {
            self.Duration(totalMinutes);
        }
        self.Duration.valueHasMutated();

更新されたサンプルは次のとおりです: http://jsfiddle.net/rniemeyer/ya7eF/168/

于 2012-07-06T20:36:55.807 に答える