Knockout.js 强制更新受限制的计算属性

Knockout.js 强制更新受限制的计算属性,knockout.js,knockout-3.0,Knockout.js,Knockout 3.0,我有一个表单,其中文本输入绑定到computed属性(包含时间)。用户输入一个值后,它将被解析为一个包含总分钟数的整数值 由于这不是一个简单的函数(有许多格式化时间的方法),因此该属性具有 这一切都很好,问题是当用户输入一个值并立即点击保存按钮时,显然还没有计算限制值 self.totalMinutes = ko.observable(0); self.totalMinutesValue = ko.computed({ read: function() { return

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

由于这不是一个简单的函数(有许多格式化时间的方法),因此该属性具有

这一切都很好,问题是当用户输入一个值并立即点击保存按钮时,显然还没有计算限制值

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
,但这当然远远不够理想。

似乎RateLimitor实际上可以解决这个问题

对可观察对象的写入不会延迟;可观察对象的值是 立即更新。对于可写的计算观察值,这意味着 写入功能总是立即运行。

所有更改通知都会延迟,包括在调用时 valueHasMutated为手动。这意味着您不能使用valueHasMutated为 强制速率受限的可观察对象通知未更改的值

默认速率限制方法不同于节流阀 算法。要匹配油门行为,请使用 notifyWhenChangesStop方法。“

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


我没有太多地使用油门,但在3.1中,我认为建议您使用rateLimit extender。也许这能解决问题-