繁体   English   中英

KnockoutJS-以设定的时间间隔重新计算计算值

[英]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 ago1 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM