目前我有一个非常简单的Ember对象,它有两个属性:startedAt
和endedAt
。
基于这些属性,我计算了属性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在控制器中执行此操作。
答案 0 :(得分:6)
我使用过这里提供的解决方案: http://livsey.org/blog/2013/02/20/tick-tock/
持续检查时间的推移与时间戳的关系。
您可以按照帖子中的说明创建时钟对象和初始值设定项,并创建isLive属性:
.property("startedAt", "endedAt", "clock.minute") });
使用clock.minute会每分钟触发一次更新。如果时间敏感(或加快开发速度),你可以使用clock.second。