amis icon indicating copy to clipboard operation
amis copied to clipboard

在table或者crud外,获取 crul内勾选的selectedItems数据

Open wangk2014 opened this issue 2 years ago • 4 comments

实现场景:

点击按钮时,需要获取两个表格中勾选的数据。

存在的问题:

crud中的selectedItems在crud外不知如何获取。 目前测试能在headerToolbar->bulkActions,但是外部组件无法获取。

当前方案:

自定义一个数组,在表格中增加checkbox,选中时修改数组的元素。 但是这样在每次操作后都需要同时维护数组数据的准确性,不太合适。

是否可以在外部获取到crud的selectedItems ,或者有方法遍历crud,获取勾选中的数据。


wangk2014 avatar Aug 01 '22 15:08 wangk2014

监听selectedChange事件,通过${event.data.selectedItems}获取信息

lurunze1226 avatar Aug 02 '22 12:08 lurunze1226

@lurunze1226 在crud里加了onEvent,确实可以监听了,谢啦!

"onEvent": { "selectedChange": { "actions": [ { "actionType": "custom", "script": (context, actionFun,event) => { let selectedIds = []; event.data.selectedItems.forEach(function (element, index, array) { selectedIds.push(element.id); }); } } ] }

wangk2014 avatar Aug 03 '22 10:08 wangk2014

@lurunze1226 还是发现了一个问题,在crud中增加勾选条目的时候,event.data.selectedItems数组的元素是勾选中的数据; 但是在取消勾选的时候,监听到的数组和增加的时候不一样,元素数据得从event.data.selectedItems[i].data字段中获取。 实在是奇怪,这个是打印日志的时候发现的,可否帮忙解答一下原因?感谢!

wangk2014 avatar Aug 03 '22 15:08 wangk2014

目前我这么临时做了下兼容,但如果不能搞明白为什么 “取消勾选”和“勾选”时为何element数据不同,还是有隐患的,辛苦开发组的同学帮忙看一下。 if(element.Id != '' && typeof(element.Id) != "undefined") { selectedIds.push(element.Id); } else if( typeof(element.data) != "undefined"){ selectedIds.push(element.data.Id); }

wangk2014 avatar Aug 03 '22 17:08 wangk2014

试试${GETRENDERERDATA("componentId", "selectedItems")}

fan0920 avatar Nov 20 '23 02:11 fan0920