繁体   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