gpt4 book ai didi

jquery - 当选择多于一行时,SlickGrid onSelectedRowsChange 会触发两次吗?

转载 作者:行者123 更新时间:2023-12-03 22:52:11 25 4
gpt4 key购买 nike

(有关背景,请参阅 this questionthis question...)

给定:

grid = new Slick.Grid("#myGrid", data, columns, options);
grid.setSelectionModel(new Slick.RowSelectionModel());
grid.onSelectedRowsChanged.subscribe(function() {
row_ids = grid.getSelectedRows();
console.log(row_ids);
});

...当我选择一行(例如第 5 行)时,我得到的输出为

[4]

...这正是我所期望的。但是,除了该行之外,CMD+Click 或 SHIFT+Click -ing 另一行(例如,第 3 行)会给我一个输出

[2]
[4, 2]

...这不是我所期望的(我只期望 [4, 2])。只要所选行数为 > 1,就会发生这种情况。因此,如果我继续选择另一行(例如第 17 行),我会得到这个

[16]
[4, 2, 16]

我在 console.log 语句上添加了一个断点,并验证了 onSelectedRowsChanged 被触发了两次:一次针对新单击的行,一次针对所有选定的行行。

这是为什么呢?我只希望它触发一次,为我提供所选行的完整数组。我将如何实现这个目标?或者我错过了什么?

最佳答案

问题(我后来发现)在于行选择模型Slick.RowSelectionModel()

具体来说,当选择该行时,handleActiveCellChange()handleClick() 被调用,每个调用 setSelectedRanges(),前者只设置为当前点击的行,后者设置为所有选中的行。

我通过在 init() (在 slick.rowSelectionModel.js 内部)_grid.onActiveCellChanged 处理程序中注销并将调用移至内部来解决此问题handleClick():

function init(grid) {
_options = $.extend(true, {}, _defaults, options);
_grid = grid;
// _grid.onActiveCellChanged.subscribe(handleActiveCellChange);
_grid.onKeyDown.subscribe(handleKeyDown);
_grid.onClick.subscribe(handleClick);
}

...

function handleClick(e, data) {

...

if (!e.ctrlKey && !e.shiftKey && !e.metaKey) {
handleActiveCellChange(e, data);
return false;
}

...

}

我不知道这个问题是否已被作者在“v2 master”中修复,正如 @fbuchinger 所说,而且我知道这个修复是快速且肮脏的(这会破坏键盘导航和行之间的选择),但它有效并给出我的问题中描述的预期行为。由于我更关心点击是否正常工作而不是键盘导航,因此我现在坚持这样做。

谁知道更好的方法吗?

关于jquery - 当选择多于一行时,SlickGrid onSelectedRowsChange 会触发两次吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4737012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com