[英]Ember- 1.13 service not initialized in component
我有一個時鍾服務-clock.js
import Ember from 'ember';
var ONE_SECOND = 2000;
export default Ember.Object.extend({
time : null,
second : null,
tick: function() {
var clock = this;
Ember.run.later(function () {
var now = new moment();
clock.setProperties({
time : now,
second : now.seconds()
});
}, ONE_SECOND);
}.observes('second').on('init')
})
我初始化為
export function initialize(container, application) {
container.optionsForType('service:clock', { singleton: true });
application.inject('route', 'clockService', 'service:clock');
application.inject('controller', 'clockService', 'service:clock');
application.inject('component', 'clockService', 'service:clock');
}
export default {
name: 'clock-service',
initialize: initialize
};
我使用時鍾行情自動收錄器來計算經過的時間(我正在使用moment.js)。
timeElapsed : function(){
var clock = this.get('clockService').get('time');
var createdTime = new moment(this.get('request.createdAt'));
var duration = moment.duration(clock.diff(createdTime));
if(duration._data.hours > 0) return duration._data.hours+" hrs";
if(duration._data.minutes > 0) return duration._data.minutes+" mins";
if(duration._data.seconds > 0) return duration._data.seconds+" secs";
return duration._data.seconds;
}.property('request.createdAt','clockService.second')
現在的問題是服務正在注入組件中,但未設置屬性。
經過一些修改,我得以使其在這里運行:
http://emberjs.jsbin.com/sexiqu/1/edit?html,js,輸出
請看看ClockServiceComponent。
我所做的與您的代碼不同的唯一事情是使用了一個以'clock.time'作為其依賴鍵的計算屬性,因此該計算屬性將每隔一秒鍾被延遲計算。
Ember.Application.initializer({
name: 'registerClock',
initialize: function(container, application) {
application.register('clock:main', Ember.clockService);
}
});
var ONE_SECOND = 1000;
Ember.clockService = Ember.Service.extend({
time : null,
second : null,
tick: function() {
var self = this;
Ember.run.later(function () {
var now = new moment();
self.setProperties({
time: now,
second: now.seconds()
});
}, ONE_SECOND);
}.observes('second').on('init')
});
Ember.Application.initializer({
name: 'injectClockService',
initialize: function(container, application) {
application.inject('controller', 'clock', 'clock:main');
application.inject('route', 'clock', 'clock:main');
application.inject('component', 'clock', 'clock:main');
}
});
App = Ember.Application.create();
App.Router.map(function() {
// put your routes here
});
App.IndexRoute = Ember.Route.extend({});
App.ClockServiceComponent = Ember.Component.extend({
second: Ember.computed('clock.time', function() {
return this.get('clock.second');
})
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.