在fancytree中自动加载节点子节点

时间:2018-01-09 21:44:18

标签: fancytree

我有一个fancytree实现,其中每个父节点都有一个可以选择的子节点。用户选择特定的孩子后,她可以保存她的选择和设置,以便她以后可以回来。

除了我初次加载以前保存的数据时,我能够完成所有这些操作。我需要做的是识别需要打开的节点(及其子节点被选中),并让Fancytree打开这些节点并选择子节点。

我正在使用延迟加载,当懒惰加载事件触发时,我能够检查是否需要选择子项并根据需要执行此操作。我希望能够以编程方式执行相同的操作,以便在加载时加载和选择所有先前选择的子项。目前,我正在尝试这样做:

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);
    }
}

我的问题是tree.getNodeByKey(growerNode)从未找到该节点,即使我在此运行后能够在控制台中找到该节点。看起来父节点尚未加载,这可能会导致此问题,但我不确定在哪里可以设置 完整的 功能。我在哪里可以做到这一点?或者甚至更好,是否有更清洁的方法来处理这个?

1 个答案:

答案 0 :(得分:1)

OP / Fletchius已经解决了这个问题,下面就是答案。我以某种不同的方式实现了它,但事件loadChildren是相同的。从中我们都找到了解决方案。我只是加载那些选定节点的节点,lazy true意味着在此节点之后有子节点。只有lazy=truethis.load();显式事件有用。

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