重现错误的代码沙箱:https://codesandbox.io/s/pense-galileo-ksx7nr(您需要单击展开一行,然后您将有一个内部网格,尝试单击里面的项目看看外部网格选择如何变化)
我有一个网格,在详细信息行中我有另一个网格(detailRow={MyCoponentWithAnotherGrid})。当我单击内部网格中的行时,外部网格也会触发 onSelectionChange 事件。这是正常的,但在该外部网格的事件中,我有信息表明该事件是为外部网格触发的,但事件的 endRowIndex 属性显示单击的项目具有来自内部网格的索引。因此,当我使用
getSelectedState({
event,
selectedState: selectedState,
dataItemKey: DATA_ITEM_KEY,
});
它返回给我新的选择,该选择选择与内部网格中相同索引下的项目...但此事件位于外部网格中。所以如果我有一个像这样的网格:
- Item 1
- Item 1.1
- Item 1.2
-Item 2
然后我单击“Item 1.2”,然后我的外部网格选择项目“Item 2”。这是一个错误吗?我可以以某种方式阻止内部网格的事件冒泡作为解决方法吗?
我在 Telerik 论坛上收到了如何检查事件是否来自内部网格的答案,因此我将其粘贴在这里:
const onSelectionChange = (event) => {
let targetEl = event.nativeEvent.target;
let isDetail = false;
while (targetEl.tagName != 'BODY') {
if (targetEl.tagName == 'TR') {
if (targetEl.className.indexOf('k-detail-row') >= 0) {
isDetail = true;
break;
}
}
targetEl = targetEl.parentNode;
}
if (!isDetail) {
...
}