En En

Инициализаторы


Инициализаторы позволяют конфигурировать приложение при загрузке.

Есть два типа инициализаторов: инициализаторы приложения и инициализаторы экземпляра приложения.

Инициализаторы приложения запускаются при загрузке приложения и предоставляют исходные средства для настройки внедрения зависимостей в приложении.

Инициализаторы экземпляра приложения запускаются при загрузке экземпляра приложения. Они позволяют настроить исходное состояние приложения и внедрение зависимостей, которые связаны с экземпляром приложения (например, индивидуальные настройки A/B тестирования).

Выполняемые в инициализаторах операции должны быть максимально простыми, чтобы минимизировать задержки при загрузке приложения. Хотя существуют продвинутые техники для использования асинхронности в инициализаторах приложения (deferReadiness и advanceReadiness), их не стоит применять. Любые асинхронные состояния загрузки (например, авторизация пользователя) лучше обрабатывать в hook'ах маршрута application. Hook'и допускают взаимодействие с DOM во время разрешения состояний.

Инициализаторы приложения

Инициализаторы приложения можно создать через генератор Ember CLI initializer:

ember generate initializer shopping-cart

Настроим инициализатор shopping-cart, чтобы внедрить свойство cart во все маршруты приложения:

app/initializers/shopping-cart.js

export function initialize(application) {
  application.inject('route', 'cart', 'service:shopping-cart');
};

export default {
  name: 'shopping-cart',
  initialize: initialize
};

Инициализаторы экземпляра приложения

Инициализаторы экземпляра приложения можно создать через генератор Ember CLI instance-initializer:

ember generate instance-initializer logger

Добавим простую регистрацию, чтобы отмечать загрузку экземпляра:

app/instance-initializers/logger.js

export function initialize(applicationInstance) {
  var logger = applicationInstance.lookup('logger:main');
  logger.log('Hello from the instance initializer!');
}

export default {
  name: 'logger',
  initialize: initialize
};

Спецификация порядка инициализаторов

Если вы хотите контролировать порядок, в котором запускаются инициализаторы, то можете использовать опции before и/или after:

app/initializers/config-reader.js

export function initialize(application) {
  // ... your code ...
};

export default {
  name: 'configReader',
  before: 'websocketInit',
  initialize: initialize
};

app/initializers/websocket-init.js

export function initialize(application) {
  // ... your code ...
};

export default {
  name: 'websocketInit',
  after: 'configReader',
  initialize: initialize
};

app/initializers/asset-init.js

export function initialize(application) {
  // ... your code ...
};

export default {
  name: 'assetInit',
  after: ['configReader', 'websocketInit'],
  initialize: initialize
};

Учтите, что порядок применяется только к инициализаторам одного типа (то есть приложения или экземпляра приложения). Инициализаторы приложения всегда будут запускаться до инициализаторов экземпляра приложения.


Комментарии (0)

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.