2014-04-28 74 views
1

我有我注入我的应用程序控制器,像这样(从ember js cookbook拍摄)自定义ClockService对象:烬控制器:计算财产不重新计算折扣注入属性

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'); 
    } 
}); 

而且我创建的应用程序中的计算性能从脉冲属性控制器在时钟服务:

App.ApplicationController = Em.ObjectController.extend({ 
    currentTime: function(){ 
     return moment().format('MMMM Do YYYY, h:mm:ss a'); 
    }.property('clock.pulse') 
}); 

时间戳(使用Momentjs)是在屏幕上的主应用程序可见,但它不与脉冲重绘。难道我做错了什么?

UPDATE:

以下应用牵引销更新,我现在有如下工作方案:

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 
}); 

回答

2

你永远取pulse所以子玉是从来没有计算它,因此从来都不是看到它改变......

http://emberjs.jsbin.com/kajuqeja/1/edit

你也可以用疯狂_seconds项目,因为它被设置它将更新

http://emberjs.jsbin.com/kajuqeja/2/edit

无论哪种方式,这似乎是一吨的开销,射击属性更改每1/4秒等,如果你真的想把它保留在页面上,达到0.99秒,并且可能抛弃整个时钟服务,并为你的时间更新设置一个简单的Ember.run.later

http://emberjs.jsbin.com/kajuqeja/3/edit

+0

感谢您的提示,并为头顶+1(无双关语意)。 – coderatchet

+0

虽然我有一个问题,我希望应用程序路由来管理模型,并简单地使用Em.Controller禁止我这样做,我将如何避免出现'错误:断言失败:错误:断言失败:无法委托set'(currentTime',2014年4月28日,下午5:37:52)到对象代理的'content'属性:其'content'未定义.'我的applicationRoute已经返回一个模型 – coderatchet

+0

out'currentTime:undefined'是问题所在。你有没有在jsbin中定义它的原因? – coderatchet