Как управлять видимостью в списке действий, что бы видимость менялась от различных событий?
Проблема: мне необходимо, скрывать из списка действий элемент по определенному условию, когда я делаю это в пейдже условие проверяется только тогда когда обновляю страницу, а не захожу из раздела. Я попытался решить с помощью механизма сообщений, где на странице редактирования публиковал, а на странице раздела принимал сообщение. На странице раздела сделал getAction с нужным мне действием и аттрибут(я просто решил попробовать,до этого getAction был в странице редактирования) , который управляет видимостью, значение которого меняется при принятии сообщения. Но все равно ничего не получилось. По выше описанному алгоритму с элементами вроде кнопок получается нормально
В секции сделал аттрибут
"qrtVisibleProcessAndSection":{ type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, dataValueType: Terrasoft.DataValueType.BOOLEAN, value: false },
в инит сделал подписку на сообщение, где изменяю значение аттрибута
init:function(){ this.callParent(arguments); this.sandbox.subscribe("setSectionActionGetDataVisible", function(args){ this.console.log("1232323232" + args); this.$qrtVisibleProcessAndSection = args }, this, ["qrtEstimate1Section"]); },
я попытался сделать getAction и привязать к нему видимость
getActions: function() { var actionMenuItems = this.callParent(arguments); actionMenuItems.addItem(this.getButtonMenuItem({ "Caption": "Получить данные с сайта", "Tag": "callProcesIntegrationSite", "Visible": {bindTo: "qrtVisibleProcessAndSection"}, "Enabled": true })); return actionMenuItems; },
Проблем с принятием сообщения нету(выше код для секции)
Может есть пример , где подобное реализовано
Нравится
Dima Avdoshin,
getAction и getSectionAction никак не связаны. getAction это функция в карточке и при биндинге используется локализуемые строки схемы карточки.
getSectionAction это функция в разделе в разделе и при биндинге используется локализуемые строки схемы разделе.
Код этих функций работает независимо.
Код карточки и раздела тоже не имеет связи между собой.
Чтобы скрыть при открытий карточки. В карточке в init или onEntityInitialized делает отправку сообщения. В реестре делаете подписку на это сообщение. При получении сообщения меняете значение атрибута. Видимость действия в разделе вещаете на атрибут.
проблема
я не могу скрывать элементы действия, если захожу из раздела, проблем с принятием сообщений нет. проблема в том как это правильно использовать и стоит ли для данного кейса использовать сообщения
Dima Avdoshin,
В совмещенном режиме взаимодействие между карточкой и разделом может быть только через сообщения. Если у вас логика в разделе зависит от изменения поля в карточке это нужно делать сообщениями.
Полозюков Евгений Петрович,
я об этом знаю, но я не могу понять как логику привазать к видимости кнопок в кнопке действия, getSectionAction отвечает за действия в самом разделе , getAction в карточке, значит я не могу его указать в разделе
И мне надо понять , как они должны взаимодействовать между собой, что бы скрыть данные на кнопки действия, когда я захожу из раздела в карточку редактирования
Полозюков Евгений Петрович,
вроде получилось, но я ничего не понял , как это произошло
в getAction добавил
actionMenuItems.addItem(this.getButtonMenuItem({
"Caption": "Получить данные с сайта",
"Tag": "callProcesIntegrationSite",
"Visible": {"bindTo": "qrtVisibleProcessAndSection"},
"Enabled": true
}));
в getSectionAction добавил
actionMenuItems.addItem(this.getButtonMenuItem({
"Caption": {"bindTo": "qrtGetDataSite"},
"Tag": "callProcesIntegrationSite",
"Visible": true,
"Enabled": true
}));
По названию они идентичны, просто у одного локализируемая строка,это баг или это часть функционала?
Dima Avdoshin,
getAction и getSectionAction никак не связаны. getAction это функция в карточке и при биндинге используется локализуемые строки схемы карточки.
getSectionAction это функция в разделе в разделе и при биндинге используется локализуемые строки схемы разделе.
Код этих функций работает независимо.
Код карточки и раздела тоже не имеет связи между собой.
Чтобы скрыть при открытий карточки. В карточке в init или onEntityInitialized делает отправку сообщения. В реестре делаете подписку на это сообщение. При получении сообщения меняете значение атрибута. Видимость действия в разделе вещаете на атрибут.