// simulate a tree data source
export function treeTransform(data: RowVO[]) {
// construct id map and result map
const map = new Map<number, RowVO>()
const resultMap = new Map<number, RowVOExtended>()
for (const item of data) {
map.set(item.id, item)
resultMap.set(item.id, {
...item,
children: []
})
}
// add children to result map
for (const item of data) {
const parentId = item.parentId
if (!parentId) {
continue
}
const parent = map.get(parentId)
if (!parent) {
continue
}
const parentResult = resultMap.get(parentId)
if (!parentResult) {
continue
}
const itemResult = resultMap.get(item.id)
if (!itemResult) {
continue
}
parentResult.children.push(itemResult)
}
// get root nodes
const result: RowVOExtended[] = []
for (const item of data) {
if (item.parentId) {
continue
}
const itemResult = resultMap.get(item.id)
if (!itemResult) {
continue
}
result.push(itemResult)
}
// log result
console.log('treeTransform', data, result)
return result
}
可复现的链接:
在线链接:https://stackblitz.com/github/Tanimodori/vxe-tree-data-virtual-loading-issue?file=README.md 复现repo:https://github.com/Tanimodori/vxe-tree-data-virtual-loading-issue
运行命令:
pnpm dev
问题描述与截图:
采用 https://vxetable.cn/#/table/scroll/tree 的示例,将数据源转换为树形以模拟树形数据源的情况,虚拟滚动无法开启。
数组数据源,虚拟滚动正常,滚动时DOM正常更新。
ArraySourceTable.vue(省略了无关的Header,下同)
树形数据源,无虚拟滚动,滚动时DOM没有变化,以下截图为展开节点的变化。
TreeSourceTable.vue
尝试将
scroll-y
设置成{enabled: true, gt: 0}
也无法开启。转换代码:
期望的结果:
虚拟滚动应正常开启
操作系统:
Windows 11
浏览器版本:
Chrome 113.0.5672.127
vue 版本:
3.3.2
vxe-table 版本:
4.4.0