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

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

所有更改通知都会延迟,包括手动调用 valueHasMutated 时。这意味着您不能使用 valueHasMutated 来强制限制速率的 observable 通知未更改的值。

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

对速率受限的计算可观察量的评估不受速率限制;如果您读取它的值,它将重新评估。

于 2014-05-01T07:55:07.113 回答