如何在Interactive Grid动态动作中获取开关列的修改后值?
解决Interactive Grid开关列修改后获取最新值的问题
这个问题我碰到过好多次啦——你现在拿到旧值的核心原因是,代码里从IG的model读取数据时,model还没同步用户刚做的修改,或者触发时机没选对。给你两个简单靠谱的解决办法:
方法一:直接从触发的开关元素获取最新值
IG里的Yes/No开关本质是复选框组件,最新状态可以直接从触发元素上读取,不用绕到model里,这是最直接可靠的方式:
// 直接判断开关的选中状态,转换为Y/N var val = $(this.triggeringElement).prop("checked") ? "Y" : "N"; alert(val);
解释:当用户切换开关时,触发元素的checked属性会立刻更新,直接判断这个属性就能拿到最新的Y/N值。
方法二:从IG Model中获取已更新的值
如果你一定要从model里取值,需要确保model已经同步了用户的修改,或者通过model的变更记录获取新值:
var $te = $(this.triggeringElement); var rowId = $te.closest('tr').data('id'); var ig$ = apex.region("GMIG").widget(); var gridView = ig$.interactiveGrid("getViews", "grid"); var model = gridView.model; // 方式A:获取当前行字段的最新值 var val = model.getFieldValue(model.getRecord(rowId), "USER_EXIST"); alert(val); // 方式B:从model的变更记录中提取修改后的新值 var rowChanges = model.getChanges()[rowId]; if (rowChanges && rowChanges["USER_EXIST"]) { var val = rowChanges["USER_EXIST"].value; alert(val); }
额外注意点
- 一定要检查动态动作的触发事件:建议选择Change事件,触发时机设置为When the element changes,避免在model还没更新的时机(比如Before Refresh)执行代码。
- 如果你的IG开启了批量编辑或者延迟同步,方法一的直接取值会比方法二更稳定。
内容的提问来源于stack exchange,提问作者sunny.3334u
相关产品推荐
相关产品推荐

