Fletchius
Fletchius

Reputation: 460

Automatically load node children in fancytree

I have a fancytree implementation where each parent node has a child node that can be selected. After a user selects specific children, she is able to save her selections and settings so that she can come back to it later.

I'm able to do all of this, except for when I do an initial load of previously saved data. What I need to do is identify the nodes that need to be opened (and its children selected), and have Fancytree open those nodes and select the children.

I'm using lazy loading, and when the lazyloading event fires I'm able to check to see if the child needs to be selected and do so as needed. What I'd like to be able to do is programmatically do the same thing so that all the previously selected children are loaded and selected upon load. Currently, I'm attempting this in this way:

function getMultipleFieldsNoReset(element,selectedFieldsArray) {
    var fieldCreator = element.value;
    var tree = $("#multipleFields").fancytree("getTree");

    var treeOptions = {
        url: "urltogetdata",
        type: "POST",
        data: {
            id: fieldCreator
        },
        dataType: "json"
    };
    tree.reload(treeOptions);


    for (var i = 0, len = selectedFieldsArray.length; i < len; i++) {
        var valueAry = selectedFieldsArray[i].split("-");
        var growerNode = valueAry[0];
        var farmNode = valueAry[1];
        var fieldNode = valueAry[2];

        var node = tree.getNodeByKey(growerNode);

        console.log(node);
    }
}

My problem is that tree.getNodeByKey(growerNode) never finds the node, even though I'm able to find the node in the console after this runs. It seems like the parent nodes aren't loaded yet, which can cause this issue, but I'm not certain where I can set a complete function. Where can I do this? Or even better, is there a cleaner way to handle this?

Upvotes: 3

Views: 1005

Answers (1)

Anup Yadav
Anup Yadav

Reputation: 3005

The OP / Fletchius has got solution on this issue and below is the answer of it. I achieved it in some different way but event loadChildren is the same. from which we both found solution. Just I'm loading those nodes which are selected nodes and lazy true meaning there are children down after this node. And only lazy=true can be useful for this.load(); explicit event.

loadChildren:function(event, data){
    var node = data.node;
    $(node.children).each(function(){
        if(this.selected && this.lazy)
        {
            this.load();
        }
    });
},

Upvotes: 2

Related Questions