2015-03-02 54 views
0

我有一個服務,稱爲時鐘Ember cli,如何使用控制器初始化服務?

//app/services/clock.js 

export default Ember.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 
}); 

,我想註冊的時鐘服務,然後將其注入到我的「間隔」路線/控制器我也有一個initialzer。

// app/initializers/clock-service.js 

import ClockService from 'app/services/clock'; 

export default { 
     name: 'ClockServiceInitializer', 
     initialize: function(container, application) { 
      container.register('clock:service', ClockService); 
      app.inject('controller:interval', 'clock', 'clock:service'); 
    } 
}; 

編輯:這似乎是這樣的:

export default { 
    name: 'services', 
    initialize: function(container, app) { 
    // Inject into all routes and controllers 

    // Or if you wanted, into a specific route 
    app.inject('controller:index', 'clock', 'service:clock'); 
    } 
}; 

回答

2

我有基本相同的事情,雖然我注入到所有控制器。

在初始化:

//container.typeInjection('component', 'store', 'store:main'); 
application.register('clock:service', ClockService, { singleton: true }); 
application.inject('controller', 'clock', 'clock:service'); 

並在控制器,用它喜歡:

updateView: { 
    // ... 
}.observes('clock.pulse') 
+0

謝謝!我似乎沒有「註冊」的工作。註冊和注入有什麼區別? – redconservatory 2015-03-04 12:57:55

+0

@redconservatory我不得不在這裏查看它:http://emberjs.com/api/classes/Ember.Application.html但註冊似乎註冊您的工廠作爲依賴注入可用,而注入實際上注入您的對象到工廠你指定(控制器,路由等) – Jon 2015-03-04 13:04:19

+1

問題中的文件根據ember-cli標準命名。所以它應該工作,即使沒有註冊,因爲解析器會自動做到這一點:-) – AWM 2015-03-06 13:17:35