【问题标题】:Re-compute an Ember object's property every interval每隔一段时间重新计算一个 Ember 对象的属性
【发布时间】:2013-04-25 13:29:39
【问题描述】:

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

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

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

<li {{ bindAttr class="event.isLive:highlight" }}>...</li>

我想每 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')

});

我为常规的 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'));
  }

});

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

我相信我需要根据these guides 在控制器中执行此操作。

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    我使用了这里介绍的解决方案: http://livsey.org/blog/2013/02/20/tick-tock/

    不断检查时间流逝与时间戳。

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

    .property("startedAt", "endedAt", "clock.minute") });
    

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

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 2011-02-07
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多