2013-04-25 3 views
1

В настоящее время у меня очень простой объект Ember, который имеет два свойства: startedAt и endedAt.Повторно вычислить свойство объекта 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') 

}); 

я сделал что-то подобное для обычного 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.

ответ

6

Я использовал решение, представленный здесь: http://livsey.org/blog/2013/02/20/tick-tock/

постоянно проверять течение времени против метки времени.

Вы создаете объект синхронизации и инициализатор, как описано в посте, и создать isLive свойство:

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

Использование clock.minute сгорит обновления каждую минуту. Вы можете использовать clock.second, если он был чувствительным к времени (или ускорить разработку.