angular - sgOnSelectedRowsChanged() 事件在与可拖动分组一起使用时多次发出 Angular-slickgrid
问题描述
可拖动分组和复选框选择器已启用。如果我们在网格与某些列分组时单击全选复选框,则会多次发出 sgOnSelectedRowsChanged() 事件,直到所有选中的复选框都被取消选中。这会在几分之一秒内发生,因此全选选项似乎不起作用。但是单选复选框工作正常。
这个问题可以在可拖动的分组 slick-grid 演示中重新创建。
- enableCheckboxSelector:在 gridOptions 中为 true。
- HTML
<angular-slickgrid gridId="grid19"
[dataset]="dataset"
[columnDefinitions]="columnDefinitions"
[gridOptions]="gridOptions"
(onAngularGridCreated)="angularGridReady($event)"
(sgOnSelectedRowsChanged)="SelectedRows($event, $event.detail.args)">
</angular-slickgrid>
- TS 中的 SelectedRows()。
public selectedRows = [];
SelectedRows(e, args) {
console.log("args", args)
this.selectedRows = [];
if (Array.isArray(args.rows)) {
this.selectedRows = args.rows.map(res => {
const item = this.gridObj.getDataItem(res);
return item;
});
}
}
解决方案
一起使用这两个功能可能并不理想,您可能需要做一些技巧才能让它们一起工作。了解正在发生的事情的最好方法是查看 SlickGrid(核心库)插件代码,在这种情况下它是slick.draggablegrouping.js,我们可以看到,在分组时调用方法updateGroupBy()时,它会调用dataView.setGrouping([]);
并解释为什么您的选择变为空。
获得有效解决方案的最佳机会就像我说的那样稍微欺骗一下 lib。您必须在 Draggable Grouping 启动之前找到一种方法来获取选择,这意味着您需要在dataView.setGrouping([]);
调用之前获取选择。不幸的是,该插件只有一个onGroupChanged
事件,我们希望onBeforeGroupChanged
为该工作举办一个事件。
- 可能的解决方案,在 fork 上创建一个 Pull Request以在slick.draggablegrouping.js
6pac/SlickGrid
中添加一个onBeforeGroupChanged
事件。我强烈建议你这样做,这将有助于社区 - 类似于选项 1),而是在slick.dataview.js
onBeforeSetGrouping
的事件中添加一个新事件。onBeforeGroupChanged
- 在 DataView 中,我看到一个
onBeforePagingInfoChanged
我认为在 的过程中被调用的setGrouping()
,如果它发生在分组完成之前你可能会很幸运并且能够在getSelectedRows()
之前拉onSelectedRowsChanged
,你必须尝试。 - 如果您通过按钮调用分组,那么您就是调用者
setDroppedGroups
,因此您可以在应用组之前获取选择的副本
我试图找到一个在选择之前触发的事件,但我找不到任何东西(尽管我在源代码中检查得非常快)。我知道我们使用slick.rowselectionmodel.js
(行选择方法),但即使只有一个事件,onSelectedRangesChanged
该事件也是事后发生的,而我们需要在分组/选择更改之前发生的事件。
So your best bet is to first try Option 3) and if that doesn't work then I strongly suggest you to contribute and do Option 1) and/or 2) (you can add both). If do decide to create a PR then just reference this SO Answer to your PR. Good luck.
... oh and BTW, I'm the author of Angular-Slickgrid and as you can see Angular-Slickgrid highly depends on the core lib SlickGrid (6pac fork), in your use case the issue is with the core lib itself not Angular-Slickgrid.
推荐阅读
- excel - 下标超出范围:Debug.Print arr(i, 1)
- javascript - CSS / jQuery - 通过随机字符循环
- html - 用于将 html 转换为图像的自定义代码,可以将其传递给 blob 并在其他屏幕中呈现为图像
- react-native - 反应原生推送通知中的计划推送通知操作 onClick/onPress 事件?
- python - 如何从 HTML 文件获取/传递字符串到 Django 中的 Views 文件?
- android - 解析来自互联网的 json 数据
- html - 样式 HTML-
- 列入名单
- 列在
- list 使每个列表元素与屏幕左侧具有相同的差异(不是 margin-left!)
- 列入名单
- java - TInkerpop GraphTraversal:搜索较短路径时 hasNext 永远不会返回
- python - ImportError:密码学版本与加载的共享对象不匹配
- xml - 如何获取给定元素的最后一个非空子元素的位置