Module: Module

Класс является родителем для всех модулей кроме главного модуля (Root Module).
Наследуется от класса Observable для реализации паттерна Наблюдатель (Observer).
Объект модуля реализует паттерн Одиночка (Singleton).
Каждый модуль создается только 1 раз, последующий вызов new Module() - вернет текущий экзепляр данного класса.

Source:
Examples

Пример создания модуля

import Onedeck from 'onedeck';

export default class ModuleName extends Onedeck.Module { ... }

Пример получения экземпляра модуля

import Module from 'ModuleName/module.js'
const module = new Module()
// Событие уровня модуля
module.$$emit('eventName', data)
// Событие уровня приложения
module.$$gemit('eventName', data)

Methods

(abstract) destroy()

Абстрактный метод. Деструктор.
В этом методе должна быть описана деструктуризация модуля.
Метод автоматически вызывается для каждого модуля старницы при переходе на другую старницу приложнеия.
Для Global модуля - дестуркторизация не производится.

Source:
Example
destroy () {
  // Отписываемся от всех событий уровня модуля
  this.$$offAll()

  ReactDOM.unmountComponentAtNode(document.getElementById('MainContent'));
}

(abstract) dispatcher(path, state)

Абстрактный метод. Диспетчер.
В этом методе должна быть описана логика модуля связанная с маршрутизацией.
Метод автоматически вызывается для каждого модуля при изменении url адреса.
Вызывается в следующем порядке:

  • dispatcher Root модуля
  • dispatcher всех Global модулей в произвольном порядке
  • dispatcher Layout модуля
  • dispatcher Page модуля
  • dispatcher Embed модулей в произвольном порядке
Parameters:
Name Type Description
path string

массив с элементами url адреса.

state Object

данные переданные с url.

Source:
Example
dispatcher (path, state) {
  console.log('dispatcher', this.constructor.name, path, state);
  // Если путь my.site.com/moduleName/item/3
  if (path[1] === 'item') this.showItem(state, path[2]);
}

(abstract) eventHandler()

Абстрактный метод. Обработчик событий.
В этом методе должны быть описаны все события текущего моудля.

Source:
Example
eventHandler () {
  // Cоздаем событие уровня модуля в котором эмитим событие уровня приложения
  this.$on('event1', (data) => this.$$gemit(data));
  // Cоздаем событие уровня модуля в котором выполняем метод doSomething
  this.$on('event2', (data) => this.doSomething(data));
}

(abstract) init(path, state)

Абстрактный метод. Инициализация приложения модуля.
В этом методе должна быть описана инициализация приложения модуля.
Метод автоматически вызывается для каждого модуля старницы при переходе на страницу модуля.
Для Global модуля, и для Embed модулей которые встороенные в Global - вызыввается только 1 раз, при инициализации приложения.
Вызывается в следующем порядке:

  • init Layout модуля если на старнице меняется Layout
  • init Page модуля
  • init Embed модулей в произвольном порядке
Parameters:
Name Type Description
path Array

массив с элементами url адреса.

state Object

данные переданные с url.

Source:
Example
init (path, state) {
  console.log('init', this.constructor.name, path, state);
  // Создаем приложение модуля
  this.reactApp = ReactDOM.render(<App />, document.getElementById('MainContent'));
  // Вызываем обработчик событий
  this.eventHandler();
}

(abstract) mounted(currentModule, currentLayout)

Абстрактный метод. Монитирование модуля.
Метод автоматически вызывается для каждого модуля при изменении url адреса.
В методе доступны объекты currentModule и currentLayout.
Вызывается в следующем порядке:

  • mounted Root модуля
  • mounted всех Global модулей в произвольном порядке
  • mounted Layout модуля
  • mounted Page модуля
  • mounted Embed модулей в произвольном порядке
Parameters:
Name Type Description
currentModule Object

текущий Page модуль.

currentLayout Object

текущий Layout модуль.

Source:
Example
mounted (module, layout) {
  console.log('mounted', this.constructor.name, module, layout);
}