簡體   English   中英

Ember-1.13服務未在組件中初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM