Как управлять видимостью в списке действий, что бы видимость менялась от различных событий?

Проблема: мне необходимо, скрывать из списка действий элемент по определенному условию, когда я делаю это в пейдже условие проверяется только тогда когда обновляю страницу, а не захожу из раздела. Я попытался решить с помощью механизма сообщений, где на странице редактирования публиковал, а на странице раздела принимал сообщение. На странице раздела сделал 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;
			},

Проблем с принятием сообщения нету(выше код для секции)
Может есть пример , где подобное реализовано
 

Нравится

6 комментариев
Лучший ответ

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 делает отправку сообщения. В реестре делаете подписку на это сообщение. При получении сообщения меняете значение атрибута. Видимость действия в разделе вещаете на атрибут.

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