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

时间:2014-05-01 07:02:36

标签: 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.
}

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

1 个答案:

答案 0 :(得分:4)

似乎rateLimiter可以解决这个问题。

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

  

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

     

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

     

默认的限价方法与油门不同   算法。要匹配油门行为,请使用   notifyWhenChangesStop方法。“

     

限速计算可观测量的评估不受速率限制;   如果你读了它的值,它会重新评估。