expanding keypath with lazyloading
-
02-07-2021 - |
Question
I have a full tree with multiple items and multiple levels, the tree is build with an ajax call and uses lazy nodes
So now i want to add the function so my tree can load and select and item if i give the full path, but before i can select the item i need to make sure that the item is loaded with lazy loading so i can access it.
I found the function .loadKeypath(), so for testing i retrieved the full path to my node with
node.getKeyPath();
so the path is /12/16/17/18
So i figured out i should put this code after the ajax data was loaded in
onPostInit: function(isReloading, isError){
$("#tree").dynatree("getTree").loadKeyPath("/12/16/17/18", function(node, status){
if(status == "loaded") {
// 'node' is a parent that was just traversed.
// If we call expand() here, then all nodes will be expanded
// as we go
node.expand();
}else if(status == "ok") {
// 'node' is the end node of our path.
// If we call activate() or makeVisible() here, then the
// whole branch will be exoanded now
node.activate();
}else if(status == "notfound") {
var seg = arguments[2],
isEndNode = arguments[3];
}
});
}
But now i get this warning in the console:
Node not found: 12 jquery.dynatree.js:49
Adn this is the full log
9:12:27.862 - Dynatree._create(): version='$Version: 1.2.0$', debugLevel=2. jquery.dynatree.js:52
9:12:27.865 - DynaTree.persistence:
Object
jquery.dynatree.js:52
9:12:27.867 - Dynatree._load(): read tree structure... jquery.dynatree.js:52
9:12:27.868 - Dynatree._init(): send Ajax request... jquery.dynatree.js:52
9:12:27.869 - Class.create.removeChildren(false) jquery.dynatree.js:52
9:12:27.876 - Dynatree._load(): render nodes... jquery.dynatree.js:52
9:12:27.877 - Dynatree._load(): bind events... jquery.dynatree.js:52
9:12:27.885 - Dynatree._load(): postInit... jquery.dynatree.js:52
9:12:27.887 - Dynatree._init(): done. jquery.dynatree.js:52
9:12:27.889 - ui.dynatree._init() was called; no current default functionality. jquery.dynatree.js:52
9:12:29.483 - Removed leading root key. jquery.dynatree.js:52
9:12:29.484 - Class.create._loadKeyPath(12/16/17/18) jquery.dynatree.js:52
9:12:29.484 - Node not found: 12 jquery.dynatree.js:49
9:12:29.485 - trigger nodeLoaded.dynatree.tree._1 jquery.dynatree.js:52
9:12:29.485 - dtnode._expand(true) IGNORED -
Class.create
jquery.dynatree.js:52
So how can i load a node what tis nested in other nodes
Solution
This is an answer for future reference
After some debugging and help from the dynatree developers, we came up with a solution, if you want to load up a key path use an string as key and not an integer.
instead of
"icon": false,
"checkbox": false,
"title": "xxxxxxxx",
"key": 23,
"type": "child"
use
"icon": false,
"checkbox": false,
"title": "xxxxxxxx",
"key": "23",
"type": "child"
That way the loadkeypath function will pickup the correct path!