我想在关闭被调用的对话框页面后刷新调用者页面(或提交页面)中的树区域。
问问题
4378 次
1 回答
2
树区域不支持原生 APEX 刷新事件。您可以在此问题中阅读一些解释How to reload Oracle APEX 5.0 Tree dynamic
但!
你可以用一种讨厌的方式来做这件事,讨厌的意思是通过 AJAX 调用重新加载页面到带有树区域的当前页面。
所以,我假设你有 2 页
- 带有树区域的主页(page_id 10)
- 模态页面(page_id 11)
在主页上你有
- 具有静态 ID 的树区域
test
OPENPOPUP
打开弹出窗口的按钮- 绑定到事件的动态操作
Dialog Closed
(选择类型button
、按钮OPENPOPUP
)- 真正的动作
Execute JavaScript Code
- 应该刷新树区域的代码
- 真正的动作
在弹出页面上,您有
- 具有定义的动态动作的按钮
CLOSEPOPUP
,可触发真正的动作Close Dialog
这是绑定主页面和模态页面的基础。您需要的是Execute JavaScript Code
每次使用 button 关闭弹出窗口时都会加载树区域的最新版本CLOSEPOPUP
。
我很好奇是否可以绕过缺乏刷新支持。所以我自己写了Execute JavaScript Code
只从主页加载树区域。
var
treeRegionStaticId = '#test',
currentTree = $(treeRegionStaticId);
parent = currentTree.parent();
$.ajax({
url: apex.server.url ({}, $v('pFlowStepId')),
dataType: 'html',
method : 'GET',
success: function( data ){
var
temp = $('<html />'),
newTree,
id;
temp.html( data );
//find region with id 'test'
newTree = temp.find( treeRegionStaticId );
//get id that is needed to call APEX tree constructor
id = newTree.find('[aria-label="Tree"]').attr('id');
//remove old tree region
currentTree.remove();
//append new tree region
newTree.appendTo( parent );
//call apex tree constructor
eval( 'apex.widget.tree.init( \''+id+'\', {}, gT'+(id.substr(1, id.length))+'Data,"S","",true,false,false,"a-Icon")' )
}
})
我已经在本地 APEX 5 上对其进行了测试,每次CLOSEPOPUP
在模式页面中使用按钮时,模式页面关闭后都会刷新树区域。
上面的代码应该用作绑定到主页上Execute JavaScript code
事件的动态操作。Dialog Closed
顺便提一句。对数据库的负担与使用apex.submit
重新加载页面相同。
于 2016-08-11T16:35:18.487 回答