背景资料:
我们的情况
在工作中,我们创建了多个应用程序,其中一些使用了模态对话框页面内的交互式网格。上周我们从 Oracle APEX 19.1 升级到了 Oracle APEX 21.1。
下面描述的问题在 19.1 版本中不存在。
(如果重要:我们必须在 Windows 上支持 Google Chrome)
如何导航到 IG
在我们所有的案例中,可以通过以下方式访问交互式网格:
- 导航到第 x 页
- 打开模态对话框 y
- 从模态对话框 y 打开模态对话框 z(通过页面处理后的分支)
=> 交互式网格可以在模态对话框 z 中找到
目标和准备
我们只想让用户访问一些交互式网格功能。出于这个原因,我们给每个 IG 一个静态 ID。
什么仍然有效
模态对话框打开,交互式网格正常显示。
我们的问题
在升级之前,以下代码段删除了相应 IG 的一些功能:
$(window).on("load", function() {
var actions = apex.region("example_ig_id").widget().interactiveGrid("getActions");
actions.remove("selection-copy-down");
actions.remove("selection-fill");
actions.remove("selection-clear");
actions.remove("single-row-view");
actions.remove("selection-copy");
});
但是自从升级到 21.1 版本apex.region("example_ig_id")
返回null
. dom 元素也无法通过$("#example_ig_id")
.
我们发现并尝试了什么
在 google chrome 开发者工具中,带有 id 的 divexample_ig_id
在元素下可见。加载页面后,然后单击 div 的类属性(通过开发人员工具)进行编辑(无需真正编辑任何内容)并取消它,apex.region("example_ig_id")
不再返回null
。如果我编辑其直接或间接父元素(也使用包含 IG 的模态对话框的 iframe 进行测试),这也有效。
自从发现这一点后,我试图通过强制刷新或回流来解决这个问题。我测试了这里给出的多个答案:Force DOM redraw/refresh on Chrome/Mac
我试过的测试(在内联控制台中)都没有解决我的问题:
$("iframe").each(function(){$(this).addClass("testClass"); $(this).removeClass("testClass");});
和:
$("iframe").each(function(){$(this).hide(); $(this).show(0);});
和:
$("iframe").each(function () {
$(this).css("opacity", .99);
setTimeout(function () {
$(this).css("opacity", 1);
}, 20);
});
我使用了模态对话框本身的 iframe,因为它从一开始就可以选择。
我不确定我是否犯了错误,但我们将不胜感激。