В настоящее время у меня очень простой объект 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.