强制更新受限制的计算属性

Wil*_*lem 6 knockout.js knockout-3.0

我有一个文本输入绑定到计算属性(包含时间)的表单.用户输入值后,会将其解析为包含总分钟数的整数值.

由于这不是一个简单的功能(格式化时间有很多种方法),因此该属性具有一个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.
}
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以强制属性立即从send方法更新?我可以添加一个,setTimeout但这当然远非理想.

4im*_*ble 4

看来rateLimiter实际上可以解决这个问题。

\n\n

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

\n\n
\n

"对 observable 的写入不会延迟;observable\xe2\x80\x99s 值会立即更新。对于可写的计算 observable,这意味着 write 函数总是立即运行。

\n\n

所有更改通知都会延迟,包括手动调用\n valueHasMutated 时。这意味着您可以\xe2\x80\x99t 使用 valueHasMutated 来强制速率受限的可观察值通知未更改的值。

\n\n

默认速率限制方法与节流算法不同。要匹配限制行为,请使用\n notifyWhenChangesStop 方法。”

\n\n

速率限制的计算可观察量的评估是\xe2\x80\x99t 速率限制的;\n 如果您读取其值,它将重新评估。

\n
\n