Вызов метода другого загруженного модуля/схемы JavaScript

Как осуществить вызов метода, другого, заведомо известного модуля/схемы ?

Например вызвать метод addRecord некоей детали на странице карточки - из кода метода который забинжен на кнопку верхнего горизонтального меню этой карточки.

Побочный вопрос: Как вообще доступаться до других модулей/схем без использования событийной модели, ведь модули и их методы - однозначно каким-то образом все в текущем окружении присутствуют, где в глобальном объекте находятся хранилище моделей и объекты загруженных модулей?

Нравится

5 комментариев

Добрый день.

Для данной цели Вам необходимо воспользоваться сообщениями 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 - соответственно его конфигурационный объект с событиями.

Так же благодаря этому методу - можно регистрировать события уже во время выполнения собственной бизнес-логики вызванной к примеру некоторыми пользовательскими действиями.

Показать все комментарии