我有一个带有文本输入的表单绑定到计算属性(包含时间)。用户输入值后,会将其解析为包含总分钟数的整数值。
由于这不是一个简单的函数(格式化时间有很多种方法),因此该属性具有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
,但这当然远非理想。
答案 0 :(得分:4)
似乎rateLimiter可以解决这个问题。
http://knockoutjs.com/documentation/rateLimit-observable.html
“对可观察者的写入不会延迟;可观察者的价值是 马上更新。对于可写的计算可观察量,这意味着 写函数总是立即运行。
所有更改通知都会延迟,包括在通话时 valueHasMutated手动。这意味着您无法使用valueHasMutated 强制限制速率的observable通知未更改的值。
默认的限价方法与油门不同 算法。要匹配油门行为,请使用 notifyWhenChangesStop方法。“
限速计算可观测量的评估不受速率限制; 如果你读了它的值,它会重新评估。