.. _ext_js_module: Внешний JS-модуль -------------------- JavaScript файл, содержащий код внешнего компонента(-ов). .. code-block:: js :caption: Шаблон клиентского кода внешнего компонента 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 {ссылка_на_объект_модуля}``, удовлетворяющего интерфейсу :java:type:`ExtJsModule`. - Создаваемый объект ``MyControl`` должен удовлетворять интерфейсу :java:type:`ExtControl`. - Создаваемый объект ``MyComposer`` должен удовлетворять интерфейсу :java:type:`ExtComposer`. - JS-модули загружаются в клиентское приложение один раз. При повторном открытии фрейма с внешним компонентом ссылка на JS-модуль будет браться из кэша приложения. - Для JS-модулей реализован ``acquire/release`` паттерн. При каждом получении ссылки на модуль, перед созданием экземпляра внешнего компонента, увеличивается счётчик использований модуля. При увеличении счётчика использований ``0 -> 1``, у модуля вызывается :java:meth:`ExtJsModule.init(id)`. При уменьшении счётчика до ``0``, вызывается :java:meth:`ExtJsModule.destroy()` .. note:: При перезагрузке прикладного кода приложения, будут перезагружены все JS-модули.