Публикация

Как из детали Адреса получить что-то со страницы контрагента. Например, вызывать какую-то функцию или узнать что в том или ином поле (например, название) или узнать состояние поля (enabled)

Вопрос

Как из детали Адреса получить что-то со страницы контрагента. Например, вызывать какую-то функцию или узнать  что в том или ином поле (например, название) или узнать состояние поля (enabled)?

Ответ

По поводу связи между деталью и карточкой: единственный вариант передачи данных между этими модулями - через механизм сообщений. Можно использовать базовые сообщения, либо создавать свои (для этого придётся создавать замещающий модуль).

Например, Вы можете в реализации метода init() кода детали выполнить подписку на сообщение ReloadDetail примерно так:

this.methods.init = function() {
 ...
 this.sandbox.subscribe("ReloadDetail", function(customArgs) {
 // выполнение действий с аргументами функции
 }, [this.sandbox.id]);
}

Дальше в коде родительской карточки по какому-либо действию можно выполнить публикацию этого сообщения:

this.methods.myAction = function() {
 Terrasoft.each(this.entitySchemaInfo.details, function(detailInfo) {
 if (detailInfo.name === "addresses") {
 sandbox.publish("ReloadDetail", this, [detailInfo.moduleId]);
 }
 }, this);
}

Передача this в качестве параметра при публикации обеспечивает доступ к объекту карточки в детали, а также ко всем его атрибутам, методам и т.д. - этот объект будет передан в параметре customArgs. Вместо this можно передать предварительно сформированный набор из только необходимых данных.

Сообщение ReloadDetail создавать не нужно, оно уже есть в базовых модулях карточки и детали.

Очень желательно до этого момента уже получить значения необходимых условий, так как после выполнения getCustomItemView() управление передаётся в модуль базовой детали (DetailModule), в котором уже выполняется привязка модели к представлению и рендеринг детали.

Нравится

Поделиться

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