В Oracle APEX 22.1 (база данных Oracle EE 21c) у меня есть модальное диалоговое окно, в котором есть контейнер кнопок с несколькими кнопками. Эти кнопки отображаются или нет, в зависимости от элемента в переменной диалогового окна, равной 0 или 1.
Когда я нажимаю кнопку «Удалить», запускается динамическое действие типа выполнения PL/SQL, изменяется значение поля в базе данных, а затем следуют два других действия Refresh True. Тип выполнения PL/SQL успешно изменяет значение поля в базе данных таблицы, и первое динамическое действие обновляет классическую область отчета в модальном диалоговом окне, показывая новое правильное значение поля.
Второе действие Refresh True Action пытается обновить область контейнера кнопок модального диалогового окна, чтобы скрыть кнопку «Отменить удаление» и отобразить остальные кнопки, все из которых являются состоянием сервера на основе значения этой переменной. Обновление не происходит (возможно, область контейнера кнопок не поддерживает событие обновления или не распространяется на свои кнопки)?
Как я могу добиться этого эффекта?
Заранее спасибо!
Я попробовал действие «Обновить» для области контейнера кнопок модального диалогового окна, но кнопки не отображаются/не скрываются соответственно.
«Обновить» не относится к контейнеру кнопок. Действие «обновить» в apex выполняет вызов ajax для обновления содержимого отчета — оно просто повторно отображает часть DOM, содержащую данные. В настоящее время только данные, отображаемые компонентом, могут быть обновлены с помощью частичного обновления страницы. Кнопка никогда не может «обновляться», она отображается в процессе рендеринга страницы и с этого момента находится в DOM на протяжении всего срока службы страницы.
Состояние на стороне сервера оценивается во время рендеринга страницы. Если условие на стороне сервера дает false во время рендеринга страницы, компонент не включается в dom. Таким образом, их нельзя показать с помощью динамического действия впоследствии (потому что они не находятся в доме), и их нельзя переоценить с помощью динамического действия (поскольку динамическое действие может манипулировать только домом, и это условие было оценено до того, как дом был отрендерен).
Решение вашей проблемы заключается в использовании действий «показать/скрыть» в динамическом действии для каждой из отдельных кнопок по причинам, описанным выше.
Большое спасибо за подробный и развернутый ответ. У меня ограниченные знания JS, поэтому я застрял. Действительно, проблема была решена с помощью другого человека. Решение заключалось в том, чтобы поместить код JS в оба действия часов кнопки с вызовами $v('BUTTON_STATIC_ID').Show/Hide соответственно. Однако этого недостаточно. Соответствующий JS-код также должен быть помещен в событие загрузки страницы, чтобы правильно отображать или не отображать кнопку в исходном состоянии. Наконец, условия сервера были полностью удалены, чтобы кнопки существовали в DOM и могли «отвечать» соответствующим образом.
Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Как сейчас написано, трудно точно сказать, о чем вы спрашиваете.