首页 > 解决方案 > Oracle APEX - 将 IG 列值传递给 javascript

问题描述

我有一个带有链接列的 IG,其中目标设置为 URL,我用它来调用 javascript。

我想要完成的是每当单击链接列时,获取另一个隐藏列的值并将页面项设置为该值:

javascript:$s('P1_ITEM',#COLUMN2#);alert($v('P1_ITEM'));

但是会发生什么,如果我使用 just 引用 COLUMN2 值#COLUMN#,我会收到一个 javascript 错误,如果我将它用单引号括起来,则 P1_ITEM 的值实际上会设置为#COLUMN2#.

标签: javascriptoracle-apexoracle-apex-19.1

解决方案


我建议的第一件事是您转向动态操作,而不是尝试将所有代码放在链接中。另外,我认为按钮比链接更好(并且可以将它们设置为看起来像链接)。

首先访问https://apex.oracle.com/ut。导航到 Reference > Button Builder 并构建所需的按钮。然后复制整个标记字段中的值。

将 Link 列的Type更改为HTML Expression,然后将 Button Builder 中的 HTML 粘贴到HTML Expression字段中。我将按钮的样式设置为看起来像一个链接(正如你所拥有的那样),向名为my-button的类属性添加了一个自定义类,并为主键值添加了一个数据属性(我的表是 EMP,所以 PK 是EMPNO)。最后看起来像这样:

<button type="button" class="t-Button t-Button--link my-custom-button" data-id="&EMPNO.">Click me!</button>

给交互式网格一个静态 IDmy-ig

完成后,创建一个新的动态动作。将Name设置为.my-button clicked,将Event设置为Click,将 Selection Type设置为jQuery Selector,将jQuery Selector设置为.my-button。最后,将Event Scope设置为Dynamic,如果报告刷新,它将使用事件委托来保持事件绑定工作(有关详细信息,请参阅此内容)。

在操作中,将Action设置为Execute JavaScript Code在代码字段中输入以下代码:

var id = $(this.triggeringElement).data('id');
var model = apex.region('my-ig').call('getViews').grid.model;
var record = model.getRecord(id);
var job = model.getValue(record, 'JOB');

$s('P1_ITEM', job);

alert($v('P1_ITEM'));

这段代码首先使用 jQuery 的data方法从按钮的 data- 属性中获取主键的值。接下来,获得对IG使用的模型的引用。然后getRecord调用模型的方法并传入主键值。最后,模型的getValue方法用于从记录中获取'JOB'值。因为我使用的是 EMP 表,所以我使用了 JOB 列,但是你可以使用任何你需要的列。

您可以在此处了解有关模型方法的更多信息: https ://apex.oracle.com/js > Interfaces > Model。


推荐阅读