[英]KnockoutJS - Recalculate computed values with a set time interval
我这里有这段代码
self.timestamp = ko.observable(data.timestamp);
self.dateFromNow = ko.computed(function ()
{
return moment(self.timestamp()).fromNow();
}, self);
self.timestamp
只是一个unix时间戳
self.dateFromNow
看起来像是44 years ago
或1 minute ago
我的目标是让self.dateFromNow
重新计算每个设置的时间间隔。
这些属性绑定到HTML <time>
元素,但是我不想通过使用JS / jQuery遍历元素并重新计算来进行重新计算。 我认为更好的方法是仅在每个设置的时间间隔内重新计算KnockoutJS中的值,然后让KO更新标记。
在KnockoutJS中有办法做到这一点吗?
更新 :我所做的就是这样的代替海报的答案
setInterval(function() {
$.each(self.foo(), function(index, item) {
item.timestamp.notifySubscribers();
});
}, 60 * 1000); // 60 * 1000 milsec
处理此问题的另一种方法是,每当另一个可观察到的更改值(在一个间隔上更改)时,重新评估计算的值。 听起来疯了吗?
var fireEvaluations = ko.observable(0);
// Somewhere after the DOM is ready
setInterval(function () {
fireEvaluations(fireEvaluations() + 1);
}, 6000);
var someOtherObservable = ko.computed(function () {
// Subscribe to the triggering observable
if (fireEvaluations()) { }
// Do your real code
});
现在,所有具有类似if(fireEvaluations()){}之类的计算值的值都会更改后重新计算。
没有内置在淘汰赛中,不(至少,据我所知)。 它具有一种机制(限制),该机制限制了传播视图模型更改的频率,但这显然不是您要追求的。 可以说,您应该在您的视图模型上拥有一个绑定到元素的成员,然后,您有责任定期更新视图模型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.