Решил, решение оказалось проще, чем я думал.
Я создал функцию lazyLoadChildren(..)
для динамического заполнения дочерних узлов (на основе узла name
) ...
то есть
const childrenLookup = {
ProjectA: [
{"name":"FOO"},
{"name":"BAR"},
{"name":"CAT"},
{"name":"ProjectB"}
],
ProjectB: [
{"name":"FOO"},
{"name":"BAR"},
{"name":"CAT"},
{"name":"ProjectA"}
]
}
const lazyLoadChildren = d => {
const dynamicChildren = childrenLookup[d.name]
if (isNotPresent(d.children) && isNotPresent(d._children) && isPresent(dynamicChildren)) {
d.children = deepCopy(dynamicChildren)
}
}
... затем я вызывал его для каждого дочернего элемента узла всякий раз, когда вызывалась функция expand(..)
...
т.е.
function expand(d, recurseFlag) {
if (d._children) {
d.children = d._children;
// lazy load all children (collapsed)
d.children.forEach(x => {
lazyLoadChildren(x)
collapse(x)
})
if (recurseFlag === true) {
d._children.forEach(x => expand(x, recurseFlag));
}
d._children = null;
}
}
Вот полный пример: https://jsbin.com/davetij/edit?output