2

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

4

1 回答 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 回答