3.5.2. Внешний JS-модуль#

JavaScript файл, содержащий код внешнего компонента(-ов).

Шаблон клиентского кода внешнего компонента#
let MyModule = /** @class */ (function () {
    let moduleId = null;

    function MyModule() {
    }

    MyModule.prototype.createControl = function (name) {
        return new MyControl();
    };
    MyModule.prototype.createComposer = function (name) {
        return new MyComposer();
    };
    MyModule.prototype.init = function (id) {
        moduleId = id;
    };
    MyModule.prototype.destroy = function () {
        moduleId = null;
    };
    return MyModule;
}());

export default new MyModule();
  • Файл содержится в ресурсах прикладного модуля.

  • Файл должен экспортировать js-модуль export default {ссылка_на_объект_модуля}, удовлетворяющего интерфейсу ExtJsModule.

  • Создаваемый объект MyControl должен удовлетворять интерфейсу ExtControl.

  • Создаваемый объект MyComposer должен удовлетворять интерфейсу ExtComposer.

  • JS-модули загружаются в клиентское приложение один раз. При повторном открытии фрейма с внешним компонентом ссылка на JS-модуль будет браться из кэша приложения.

  • Для JS-модулей реализован acquire/release паттерн. При каждом получении ссылки на модуль, перед созданием экземпляра внешнего компонента, увеличивается счётчик использований модуля. При увеличении счётчика использований 0 -> 1, у модуля вызывается ExtJsModule.init(id). При уменьшении счётчика до 0, вызывается ExtJsModule.destroy()

Note

При перезагрузке прикладного кода приложения, будут перезагружены все JS-модули.