2013-04-25 162 views
1

目前我有一个非常简单的Ember对象,它有两个属性:startedAtendedAt每隔一段时间重新计算Ember对象的属性

基于这些属性,我计算了属性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') 

}); 

我也做了一个常规的灰烬查看{{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做到这一点。

回答

6

我用过的解决方案呈现在这里: http://livsey.org/blog/2013/02/20/tick-tock/

,不断对时间与时间戳的通道进行检查。

创建时钟对象,并初始化为在后描述,并创建属性isLive:

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

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