gpt4 book ai didi

javascript - 无法从 Ember Controller 获取注入(inject)的 Ember 服务 - 但适用于模型和适配器

转载 作者:行者123 更新时间:2023-11-28 07:24:12 25 4
gpt4 key购买 nike

我在 Ember CLI 项目中遇到了问题,无法从 Controller 操作函数获取注入(inject)的 ember 服务。

真正奇怪的是,这完全适用于我的模型和自定义适配器:

Controller :

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');
}
});

为什么这可以在模型和适配器上工作,但不能在 Controller 上工作?

最佳答案

我不熟悉 Ember.inject.service() 模式,但是您不使用 http://guides.emberjs.com/v1.10.0/understanding-ember/dependency-injection-and-service-lookup/ 中概述的模式是否有原因? ?

此外,如果您已经将 nodeazureStorage 抽象到适配器中,为什么还要将它们注入(inject)到 Controller 中?您应该只使用 Controller 中的 this.store.find('whatever', 123) 来获取数据。如果您的 azureStore 与普通的 Ember 数据存储不同,那么您应该创建一个新存储并将其注册到应用程序的容器中。如果将其注入(inject) Controller 中,则可以使用 this.azureStorethis.container.lookup('store:azure') 访问它。

此外,开始向模型注入(inject)内容也不是一个好习惯。我真的很想看看 Ember 友好的服务/依赖注入(inject)方式,因为这看起来不太优雅,而且你要复制大量代码来访问你已经拥有的东西。

关于javascript - 无法从 Ember Controller 获取注入(inject)的 Ember 服务 - 但适用于模型和适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29886720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com