Вопрос
Как из детали Адреса получить что-то со страницы контрагента. Например, вызывать какую-то функцию или узнать что в том или ином поле (например, название) или узнать состояние поля (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), в котором уже выполняется привязка модели к представлению и рендеринг детали.