问题描述
我正在写一个emberjs应用程序,我写了一个自定义组件来从精灵文件加载图像。 但是,我想使组件通用,并能够从模板中指定的文件加载任何图像。 例如,我希望能够执行以下操作:
{{svg-icon css-class="" svg-sprite="svgs/svg-sprites.svg" svg-id="special"}}
我能够让组件工作,但后来我想进一步,而不是每次我想在config / environment.js下的应用程序设置中配置文件时键入/指定svg文件
所以,我以为我会写一个ember初始化器,它会在我的所有组件中注入ENV.APP配置对象。 所以在我的应用程序初始化程序中,我有以下代码:
export function initialize(registry, application) {
application.register('config:main', window.MyApp, {instantiate: false});
application.inject('component', 'config', 'config:main');
}
以上工作完美,在我的组件javascript文件中,我可以简单地做:
this.get('config').SPRITE_LOCATION;
获取精灵文件的位置。
但我想知道这是否是正确的方法? 有没有更好的方法呢? 如果我将组件更改为CLI插件会更好吗? 我如何访问应用程序配置并将其提供给我的cli插件?
谢谢您的帮助。
1楼
thisFunction
0
2018-04-11 12:30:42
这种方法效果很好,如果要在插件中使用应用程序配置,可以使用Ember.getOwner()方法。
例如,在组件文件中,您可以添加类似的内容:
svgPath: computed(function () { return get(Ember.getOwner(this).resolveRegistration('config:environment'), 'svgPath'); }),