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

Was it helpful?

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!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top