【问题标题】:Forcing update of a throttled computed property强制更新受限制的计算属性
【发布时间】:2014-06-17 16:22:21
【问题描述】:

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

由于这不是一个微不足道的函数(格式化时间的方法有很多),所以该属性有一个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,但这当然远非理想。

【问题讨论】:

标签: knockout.js knockout-3.0


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2012-11-26
    • 2021-01-23
    • 1970-01-01
    • 2020-09-02
    • 2017-12-20
    相关资源
    最近更新 更多