При добавлении дочерних элементов выбранного родителя проверьте, есть ли у родителя дочерние элементы. Если TRUE, добавьте каждого дочернего элемента и установите для каждого из этих дочерних элементов значение selected.
Вот код ниже. onLazyRead
поднимется наверх. Каждый раз, когда вы нажимаете на ленивый узел, эта функция срабатывает. Внутри этой функции должен быть вызов вашей функции, которая извлекает дочерние данные для только что выбранного вами узла.
В приведенном ниже коде я решил эту проблему. Практически все, что он делает, это проверяет, выбран ли родитель добавляемого узла. Если TRUE, вы добавляете узел, а затем .select()
его.
Это намного проще при отмене выбора узла, потому что все узлы уже загружены. При отмене выбора просто спуститесь по иерархии дерева от узла, который отменяется, и просто снимите отметку с каждого узла.
Я знаю, что это слишком много кода, чтобы просто бросить вам его, но, надеюсь, вы сможете уловить из него идею. Если вы не можете, я постараюсь вернуться к этой теме во время работы. Может быть, вы даже можете опубликовать то, что у вас есть до сих пор?
onLazyRead: function(node){
jQuery("#tree2").dynatree("getTree").disable();
var pParentID = node.data.key;
//Select the Node
doChildReport(pParentID); //Get Children for this node's ID
},
///....
//Methods to grab data from a "XMLHttpRequest GET" go here
//....
//When you finally want to add the children that you fetched using the ID of the node you selected...
//treeArray is an array of node data that has been parsed out of a
//string returned by a "XMLHttpRequest GET"
//Contents of array in order, repeating: treeArray[0] = ParentID, [1] = nodeID [2] = nodeName
//Example, the array would return [111], [222], ["Child Node"]
if(){ //IF Next fetched node is on the last level, ie. no children
//add normally
}
else{ //If NOT, add lazy.
if(treeArray[1] != "nill" && treeArray[1] != undefined){
//IF THE PARENT NODE IS SELECTED
if(jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[0]).isSelected() == true){
//AND IF the child node does not exist
if(jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[1]) == null){
//Add the child node and then mark it selected
addChildNodeLazy(treeArray[1], treeArray[2], treeArray[0]);
jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[1]).select();
}
}else{
if( jQuery("#tree2").dynatree("getTree").getNodeByKey(treeArray[1]) == null){
addChildNodeLazy(treeArray[1], treeArray[2], treeArray[0]);
}
}
}
}
Функция ленивой загрузки...
function addChildNodeLazy(NodeID, NodeName, ParentID){
jQuery("#tree2").dynatree("getTree").getNodeByKey(ParentID).addChild({title: NodeName, key: NodeID, icon: false, isFolder: true, isLazy: true});
}
17.10.2012