在Ember.JS中创建in-repo-addon
提供了很多可能性。今天我偶然发现了一个案例,当时我想将目录中的所有类(例如my-dir
)注册到Dependency Injector
(与Ember使用services
完成的方式相同,但我想要使用其他一些命名空间。)
例如,我想允许开发人员在proxy
目录中创建多个类,并在proxy:
命名空间下的DI中注册所有这些类。所以稍后我们可以使用:
Ember.Component.extend({
myProxy: Ember.inject('proxy:my'),
});
答案 0 :(得分:1)
您需要使用初始化程序执行此操作。有关详细信息,请访问:https://guides.emberjs.com/v2.12.0/applications/dependency-injection/
困难的部分可能是获取s文件夹中的所有代理项目以自动注册...
修改强> 看起来我没有花足够的时间思考这个问题。您应该能够轻松地完成至少部分内容。这有两个部分。
Ember目前使用ember-resolver
来处理各种项目的查找。如果您检查解析器的测试,您会注意到您应该能够映射到您想要的任何内容:https://github.com/ember-cli/ember-resolver/blob/master/tests/unit/resolvers/classic/basic-test.js
因此,在您的情况下,如果您从Ember实例化类(例如路由,控制器或组件)中执行Ember.getOwner(this).lookup('proxy:main')
,它将查找您的插件可以填充的app/proxy/main.js
。
有关Ember.getOwner
查询的详细信息,请访问:https://emberjs.com/api/classes/Ember.html#method_getOwner
因此,此时您可以查找代理(在init
方法中可以使用)。但是如果我们想要真正优雅,我们希望允许Ember.inject.proxy('main')
语法。
这样做会涉及在初始化程序中调用Ember.inject
内的私有方法。因为new Javascript modules RFC中的命名方案正在发生变化,尝试添加这种语法糖可能是不明智的......
所以我建议避免触及私有API,除非它对您的应用设计非常重要。