Oracle APEX |如何在对话框页面关闭后刷新树

时间:2016-08-10 15:19:48

标签: tree oracle-apex-5

我想在关闭被叫对话框页面后刷新调用者页面(或提交页面)中的树区域。

1 个答案:

答案 0 :(得分:2)

树区域不支持本机APEX刷新事件。您可以在此问题How to reload Oracle APEX 5.0 Tree dynamically

中阅读一些解释

但是!

你可以用一种令人讨厌的方式做到这一点,而且讨厌我的意思是通过AJAX调用你的当前页面用树区域重新加载页面。

所以,我假设你有2页

  • 带有树区域的主页面(page_id 10)
  • 模态页面(page_id 11)

在主页面上

  • 具有静态标识test
  • 的树区域
  • 按钮OPENPOPUP打开弹出窗口
  • 绑定到事件Dialog Closed的动态操作(选择类型button,按钮OPENPOPUP
    • true action Execute JavaScript Code - 应该刷新树区域的代码

在弹出页面上有

  • 按钮CLOSEPOPUP,其中定义了动态操作,可触发真实操作Close Dialog

这是绑定主页面和模态页面的基础知识。您需要的是Execute JavaScript Code,每次使用按钮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重新加载页面相同。