6

計算されたプロパティ(時間を含む)にバインドされたテキスト入力を持つフォームがあります。ユーザーが値を入力すると、合計分数を含む整数値に解析されます。

これは単純な関数ではないため (時間をフォーマットする方法は多数あります)、プロパティにはThrottle Extenderがあります。

これはすべて正常に機能します。問題は、ユーザーが値を入力してすぐに保存ボタンを押すと、調整された値がまだ評価されていないことです。

self.totalMinutes = ko.observable(0);
self.totalMinutesValue = ko.computed({
    read: function() { 
        return MinutesToFormat(self.totalMinutes()); 
    } 
    write: function(value) { 
        self.totalMinutes(FormatToMinutes(value)); 
    } 
}).extend({ throttle: 250 });

self.Save = function() {
    // Send self.totalMinutes() to server, need to ensure the throttled 
    // computed has been written.
}

send メソッドからすぐにプロパティを強制的に更新する簡単な方法はありますか? を追加することもできますsetTimeoutが、もちろんそれは理想とはほど遠いものです。

4

1 に答える 1

4

rateLimiter が実際にこの問題を解決できるようです。

http://knockoutjs.com/documentation/rateLimit-observable.html

"オブザーバブルへの書き込みは遅延しません。オブザーバブルの値はすぐに更新されます。書き込み可能な計算されたオブザーバブルの場合、これは書き込み関数が常にすぐに実行されることを意味します。

valueHasMutated を手動で呼び出す場合を含め、すべての変更通知が遅延します。つまり、valueHasMutated を使用して、レート制限されたオブザーバブルに変更されていない値を強制的に通知することはできません。

デフォルトのレート制限方式は、スロットル アルゴリズムとは異なります。スロットルの動作を一致させるには、notifyWhenChangesStop メソッドを使用してください。」

レート制限された計算オブザーバブルの評価はレート制限されません。その値を読み取ると、再評価されます。

于 2014-05-01T07:55:07.113 に答える