簡體   English   中英

無法從Ember Controller獲取注入的Ember服務-但適用於模型和適配器

[英]Can't get Injected Ember Service from Ember Controller - But works on models & adapters

我遇到了一個Ember CLI項目的問題,該項目無法從控制器操作功能獲得注入的余燼服務。

真正奇怪的是,這完全適用於我的模型和自定義適配器:

控制器:

 export default Ember.Controller.extend({ node: Ember.inject.service(), azureStorage: Ember.computed.alias('node.azureStorage'), actions: { myAction: function () { // this returns null var x = this.get('azureStorage'); } } }); // The service code (azureStorage and fs are NOT null) if (window.requireNode) { azureStorage = window.requireNode('azure-storage'); fs = window.requireNode('fs'); } export default Ember.Service.extend({ azureStorage: azureStorage, fs: fs, getActiveAccount: function (store) { return new Ember.RSVP.Promise(function (resolve, reject) { var accounts = store.all('account'), length = accounts.get('length'), i = 0; accounts.forEach(function (account) { if (account.get('active') === true) { return Ember.run(null, resolve, account); } i += 1; if (i >= length) { return Ember.run(null, reject, 'could not find any active accounts'); } }); }); } }); // the controller test code var controller = this.subject(); controller.send('myAction'); 

我本來希望這會返回服務和azureStorage對象。 在我的模型和適配器上,相同的模式也很好:

 export default DS.Adapter.extend({ serializer: serializer.create(), node: Ember.inject.service(), azureStorage: Ember.computed.alias('node.azureStorage'), findQuery: function () { // this returns the value correctly var x = this.get('azureStorage'); } }); 

有什么理由可以在型號和適配器上使用,但不能在控制器上使用?

我對Ember.inject.service()模式不熟悉,但是有沒有理由不使用http://guides.emberjs.com/v1.10.0/understanding-ember/dependency-注射和服務查詢/

另外,如果已經將nodeazureStorage抽象到適配器中,為什么還要將它們注入控制器中? 您應該只使用this.store.find('whatever', 123)來獲取數據。 如果您的azureStore與普通的Ember Data存儲區不同,則應創建一個新存儲區,並將其注冊到應用程序的容器中。 如果將其注入控制器中,則可以使用this.azureStorethis.container.lookup('store:azure')

另外,也不是開始向模型中注入內容的好習慣。 我真的會看一下Ember友好的服務/依賴注入方式,因為這看起來並不十分優雅,並且您正在復制大量代碼以訪問現有的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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