在knockoutjs中自动更新显示

时间:2011-12-24 08:09:26

标签: knockout.js

如何在没有用户生成的事件的情况下显示和更新时间?这是我的开始,但我无法弄清楚如何让视图刷新。

function viewModel() {
    this.clock = ko.computed(function() { return new Date().getTime(); }, this).extend({ throttle: 1000 });

};

ko.applyBindings(new viewModel());

使用以下HTML:

<span data-bind="text: clock"></span>

这是jsfiddle

2 个答案:

答案 0 :(得分:22)

这似乎可以解决问题:

function viewModel() {
    var self = this;

    this.clock = ko.observable(new Date());

    this.tick = function() {
        self.clock(new Date());
    };

    setInterval(self.tick, 3000);
};

ko.applyBindings(new viewModel());

与此HTML结合使用时:

<span data-bind="text: clock"></span>

答案 1 :(得分:1)

ko.now = function(interval) {
  var now = ko.observable();
  var time = new Date().getTime()
  setTimeout(function() {
    setInterval(function() {
      now(new Date());
    }, interval);
    now(new Date());
  }, interval - time % interval);

  now(new Date(time - time % interval));
  return now;
}

ko.applyBindings({ now: ko.now(5*1000) });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div id="clock" data-bind="text: now"></div>