2013-04-25 195 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。

相關問題