Класс является родителем для всех модулей кроме главного модуля (Root Module). Наследуется от класса Observable для реализации паттерна Наблюдатель (Observer). Объект модуля реализует паттерн Одиночка (Singleton). Каждый модуль создается только 1 раз, последующий вызов new Module() - вернет текущий экзепляр данного класса.
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 модуля - дестуркторизация не производится.
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. |
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()
Абстрактный метод. Обработчик событий. В этом методе должны быть описаны все события текущего моудля.
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. |
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 модуль. |
Example
mounted (module, layout) {
console.log('mounted', this.constructor.name, module, layout);
}