gpt4 book ai didi

javascript - Ember Controller : computed property not recalculating off injected property

转载 作者:行者123 更新时间:2023-11-30 17:30:00 25 4
gpt4 key购买 nike

我有一个自定义的 ClockService 对象,我像这样注入(inject)到我的应用程序 Controller 中(取自 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');
}
});

然后我根据时钟服务中的脉冲属性在应用程序 Controller 中创建了一个计算属性:

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

最佳答案

您永远不会获取 pulse,所以 Ember 永远不会计算它,因此永远不会看到它发生变化...

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

关于javascript - Ember Controller : computed property not recalculating off injected property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23332328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com