Ember.js: как внедрить настройки приложения

Я пишу приложение emberjs, в котором я написал собственный компонент для загрузки изображений из файла спрайта. Однако я хотел сделать компонент универсальным и иметь возможность загружать любое изображение из файла, указанного в шаблоне. Например, я хочу иметь возможность сделать что-то вроде ниже:

{{svg-icon css-class="" svg-sprite="svgs/svg-sprites.svg" svg-id="special"}}

Мне удалось заставить компонент работать, но затем я хочу пойти дальше и вместо того, чтобы вводить/указывать файл svg каждый раз, когда я хочу настроить файл в настройках приложения в config/environment.js

Итак, я подумал, что напишу инициализатор 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?

Спасибо за помощь.


person MojoJojo    schedule 26.07.2015    source источник


Ответы (1)


Этот подход работает хорошо, если вы хотите использовать конфигурацию приложения в аддоне, вы можете использовать метод Ember.getOwner().

Например, в файл компонента можно добавить что-то подобное:
svgPath: computed(function () { return get(Ember.getOwner(this).resolveRegistration('config:environment'), 'svgPath'); }),

person thisFunction    schedule 11.04.2018