Как я могу получить пространство имен включающего приложения в аддоне Ember CLI?

Я создаю Ember CLI ember-addon, и в файлах моего аддона мне нужен доступ к конфигурации приложения. У меня нет возможности узнать, как будет называться приложение, включающее этот аддон, поэтому я не могу просто сделать import ENV from 'app-name/config/environment', как в самом приложении.

Как я могу получить доступ к пространству имен приложения, которое использует ember-addon, из самого дополнения, чтобы я мог импортировать вещи из этого приложения?


person Kerrick    schedule 02.09.2014    source источник


Ответы (2)


Вам не нужно получать пространство имен, чтобы получить конфигурацию.
Любая настройка, которую требует ваше дополнение, должна быть добавлена ​​к ENV.APP в config/environment.js.

Например, если вам нужна настройка MY_APP_KEY, вам потребуется, чтобы что-то вроде
ENV.APP.MY_APP_KEY = 'ABCDEF'; было добавлено к config/environment.js.

Затем вы можете использовать инициализатор, чтобы прочитать свойство экземпляра приложения и внедрить его в свой аддон, выполнив что-то вроде...

export default {
  name: "my initilizer",

  initialize: function(container, app) {

    //get you setting off of the app instance
    var key = app.get('MY_APP_KEY');

    //register it
    app.register('config:myAddonKey', key, { instantiate: false });

    //inject it where you want to access it
    app.inject('route', 'myAddonKey', 'config:myAddonKey'); 
  }
};

Вы можете увидеть пример того, как это делается в Адаптер Ember Django

person tikotzky    schedule 02.09.2014
comment
У меня не будет надежного доступа к приложению или контейнеру. Например, как насчет простого utils/asset-host.js, который заботится о ENV.environment? - person Kerrick; 03.09.2014

Одна из возможностей - использовать initializer:

Ember.Application.initializer({
    name: 'my-component',
    initialize: function(container, app) {
        // you have access to 'app' here...
    }
});
person Steve H.    schedule 02.09.2014