我有一个自定义的ClockService对象,我将其注入到我的应用程序控制器中(取自ember js cookbook):
App.ClockService = Em.Object.extend({
pulse: Ember.computed.oneWay('_seconds').readOnly(),
tick: function () {
var clock = this;
Ember.run.later(function () {
var seconds = clock.get('_seconds');
if (typeof seconds === 'number') {
clock.set('_seconds', seconds + (1/4));
}
}, 250);
}.observes('_seconds').on('init'),
_seconds: 0
});
Ember.Application.initializer({
name: 'clockServiceInitializer',
initialize: function(container, application) {
container.register('clock:service', App.ClockService);
application.inject('controller:application', 'clock', 'clock:service');
}
});
我在应用程序控制器中根据时钟服务中的pulse属性创建一个计算属性:
App.ApplicationController = Em.ObjectController.extend({
currentTime: function(){
return moment().format('MMMM Do YYYY, h:mm:ss a');
}.property('clock.pulse')
});
时间戳(使用Momentjs)可在屏幕上的主应用程序中查看,但不会随脉冲重绘。我做错了吗?
更新
在下面应用Kingpins更新,我现在有以下工作解决方案:
App.ApplicationController = Em.Controller.extend({
setTime: function() {
var time = moment().format('MMMM Do YYYY, h:mm:ss a');
this.set('currentTime', time);
Em.run.later(this, this.setTime, .9999);
}.on('init'),
currentTime: undefined
});
答案 0 :(得分:2)
你永远不会抓取pulse
所以Ember永远不会计算它,因此永远不会看到它改变......
http://emberjs.jsbin.com/kajuqeja/1/edit
你也可以使用疯狂的_seconds
项,因为它已被设置,它会更新
http://emberjs.jsbin.com/kajuqeja/2/edit
无论哪种方式,这似乎是一大笔开销,每1/4秒触发一次房产变更等等。如果你真的想在页面中保留这一点,那我就达到0.99秒,也许是沟渠整个时钟服务并为您的时间更新设置一个简单的Ember.run.later
。