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