每隔一段时间重新计算一个Ember对象的属性

1 ember.js

目前我有一个非常简单的Ember对象,它有两个属性:startedAtendedAt.

基于这些属性,我有计算属性isLive.哪个时间与当前时间进行比较.

渲染车把模板时,我通过添加类来突出显示某些项目highlight.

<li {{ bindAttr class="event.isLive:highlight" }}>...</li>
Run Code Online (Sandbox Code Playgroud)

我想每5秒左右更新一次这个模板,所以我知道isLive需要重新计算.我该怎么办呢?

App.Event = Ember.Object.extend({
  endedAt: null,
  startedAt: null,

  isLive: function() {
    if (!this.get('startedAt') || !this.get('endedAt')) {
      return false;
    }

    var now = moment();

    return (now.diff(moment(this.get('startedAt'))) >= 0 &&
            now.diff(moment(this.get('endedAt'))) < 0);
  }.property('startedAt', 'endedAt')

});
Run Code Online (Sandbox Code Playgroud)

我为常规的Ember View做了类似的事情{{view App.TimerView}}.

App.TimerView = Ember.View.extend({
  tagName: 'time',
  template: Ember.Handlebars.compile('{{ view.now }}'),

  init: function() {
    this._super();
    this.set('now', moment().format('HH:mm:ss'));
  },

  now: null,

  willInsertElement: function(evt) {
    var self = this;

    var intervalId = setInterval(
      function() {
        self.set('now', moment().format('HH:mm:ss'));
      }, 1000);

    this.set('interval', intervalId);
  },

  willDestroyElement: function(evt) {
    clearInterval(this.get('interval'));
  }

});
Run Code Online (Sandbox Code Playgroud)

但我似乎无法对常规对象应用相同的逻辑.有人能指出我正确的方向吗?

我相信我需要根据这些指南在控制器中执行此操作.

小智 6

我使用过这里提出的解决方案:http: //livsey.org/blog/2013/02/20/tick-tock/

持续检查时间的推移与时间戳的关系.

您可以按照帖子中的描述创建时钟对象和初始化程序,并创建isLive属性:

.property("startedAt", "endedAt", "clock.minute") });
Run Code Online (Sandbox Code Playgroud)

使用clock.minute将每分钟触发一次更新.如果时间敏感(或加速开发),你可以使用clock.second.