Я знаю, что немного опоздал на вечеринку, но я нашел решение и для этого. Надеюсь, это кому-нибудь поможет.
Для начала вам понадобится обработчик onSelect
для дерева (если у вас его еще нет). Когда узел выбран, отметьте его как выбранный, а затем разверните, если это возможно. Вот мой:
onSelect: function(selected, node) {
if (selected === true) {
node.data.activateChildrenOnLoad = true; //Let the lazy children know
//node.expand(true) did not work for me, but it might for you
if (!node.isExpanded()) {
node.toggleExpand();
}
}
}
Затем вам нужно вставить немного кода в вашу функцию onLazyRead
. Я обрабатываю весь AJAX вручную, поэтому, если вы разрешите dynatree обрабатывать его для вас, вам, возможно, придется изменить некоторые вещи.
onLazyRead: function(node) {
getNodesFromServer(function(nodes) {
node.addChild({
selected: node.data.activateChildrenOnLoad,
activateChildrenOnLoad: node.data.activateChildrenOnLoad
});
if (node.data.activateChildrenOnLoad) {
var nodes = node.getChildren();
var last = nodes[nodes.length-1];
if (!last.isSelected()) {
last.toggleSelect();
}
if (!last.isExpanded()) {
last.toggleExpand();
}
}
});
}
И это все, что нужно сделать. Когда вы выбираете (проверяете) узел, он будет рекурсивно загружать, проверять и расширять все его ленивые дочерние элементы.