Вызов метода другого загруженного модуля/схемы JavaScript
Как осуществить вызов метода, другого, заведомо известного модуля/схемы ?
Например вызвать метод addRecord некоей детали на странице карточки - из кода метода который забинжен на кнопку верхнего горизонтального меню этой карточки.
Побочный вопрос: Как вообще доступаться до других модулей/схем без использования событийной модели, ведь модули и их методы - однозначно каким-то образом все в текущем окружении присутствуют, где в глобальном объекте находятся хранилище моделей и объекты загруженных модулей?
Нравится
Добрый день.
Для данной цели Вам необходимо воспользоваться сообщениями sandbox. Данная тема подробно обсуждалось тут.
Подскажите, в клиентской схеме можно описать специальный конфигурационный объект messages, а как быть с модулями, у них иная структура AMD модуля.
Допустим я хочу использовать модуль-миксин.
В конфигураторе в структуре модуля модно добавить события (Messages).
насколько я понимаю - описать событие в коде самого модуля нельзя ?
В любом случае когда я подключаю свой миксин к схемам, и внутри них пытаюсь опубликовать событие, то получаю ошибку, что событие не объявлено в клиентской схеме, к которой подключен миксин, и код которого вызывается на исполнение:
Как же так получается ?
В модуле объявляется событие, но подключив этот модуль к карточке - объявленные в нем события не доступны для публикации ?
Здравствуйте, Илья.
Для решения вопроса вам необходимо в схеме, к которой подключается миксин, зарегистрировать сообщения, которые используются в миксине.
Подскажите, почему даже если указать в зависимостях схемы модуль в котором объявлено "сообщение",
скажем некий модуль AksQuestionMessages
define("AksQuestionMessages", [], function() { return { messages: { "AddNewEmailFromCaseAskQuestion": { mode: this.Terrasoft.MessageMode.BROADCAST, direction: this.Terrasoft.MessageDirectionType.PUBLISH } } }; });
Далее в зависимостях схемы подключаем данный модуль - и все равно при попытке публикации сообщения в любом методе карточки - получаем ошибку про необъявленное сообщение.
Каким же образом наследуются сообщения ?
Неужели единственный способ это объявлять их непосредственно в коде схемы или ее замещающего объекта ?
Сам отвечаю на свой вопрос - для этого существует специальный метод, разместить его вызов следует в момент инициализации схемы, т.е. в методе "init":
this.sandbox.registerMessages(AksQuestionMessages.messages);
в приведенном примере - AksQuestionMessages это некий модуль из зависимостей текущей схемы,
define("CasePage", ["AksQuestionMessages", "AskQuestionMixin", "css!AskQuestionCSS"], function(AksQuestionMessages) { return { entitySchemaName: "Case", ...
messages - соответственно его конфигурационный объект с событиями.
Так же благодаря этому методу - можно регистрировать события уже во время выполнения собственной бизнес-логики вызванной к примеру некоторыми пользовательскими действиями.