有人对我执行函数的顺序有建议吗?
在 Oracle APEX 中,我向标有“导出”的按钮添加了代码,以捕获交互式网格中每个选定行的 ROWID,然后将这些值传递到页面项。目标是执行需要提交的流程。此外,我还创建了一个名为
downloadFile()
的 JavaScript 函数,用于生成文件下载。现在的挑战是确保 downloadFile()
函数仅在提交后执行。但是,我希望只保留一个按钮,单击该按钮时,会将值传递给页面项,提交页面,然后执行 downloadFile()
函数。
我尝试在页面的 JavaScript 部分(函数和全局变量声明)中将该函数声明为全局函数,并在按钮中提交后调用该函数。但是,这会产生一个空白文件,因为它全部一起运行,并且值是在文件生成后在页面项中设置的。我还尝试将提交添加到
APEX$ROW_SELECTOR
列的单击事件中,但它一次仅适用于一行,因为每次提交后都会清除选择。
我已经设法让它通过两个按钮工作。单击第一个按钮捕获网格中所选行的 ROWID,应用提交,然后单击第二个按钮执行
downloadFile()
函数,生成文件。但是,我不想为此有两个按钮。
如何确保
downloadFile()
函数仅在提交后执行,同时保持此操作仅一个按钮?
由于以下原因,您想到的想法无法实现。在 APEX 中,页面的生命周期分为 3 个阶段。
这 3 个阶段始终按该顺序发生并且不能重叠。
Javascript 只能在第 2 阶段执行。一旦第 3 阶段开始,服务器就开始执行其业务,并且 DOM 不再可访问。您正在考虑的解决方案需要 javascript(仅可能在第 2 阶段)在第 3 阶段发生某些事情之后发生。
一种可能的解决方法是在提交时设置页面项或请求值,然后在满足某些条件时在页面加载时执行 JavaScript 函数。这可以通过具有服务器端条件的页面初始化动态操作来完成。