2

我们在同时使用延迟加载功能和 open_all 功能时遇到了问题。

树的内容是使用延迟加载功能加载的。

当我们选择一个节点并单击全部展开按钮时,该节点的所有子节点将使用 jstree ajax 调用获取并使用 open_all 函数打开,当单击全部折叠按钮时,我们使用 close_all 函数。这是第一次完美运行。

但是第二次,当我们在同一个节点上单击全部展开时,递归地点击相同的 ajax url。(我们认为,每次使用 open_all 打开节点时都会点击 url)。预期的行为不是调用 url(因为数据已经加载),只应该执行 open_all 函数。

你能否澄清如何解决这个问题

//加载树的代码

 $("#TreePanel").jstree({
    "xml_data" : {
        "ajax" : {
            "url" : "/ajax/loadTree",
            "type" : "post",
            "data" : function(node) {
                var data = {};              
                data.dunsNumber = ${dunsNumber};
                if (node == -1) {
                    //set duns number to data
                } else {
                    data.selectedNodeId = node.attr("id");
                    data.expandAll = isExpandAll;
                }
                return data;
            },
            "success" : function(data) {
                if ($(data).attr('id') == 'error') {
                    $("#overlayContent").empty();                       
                } else {
                    return data;
                }
            }
         },
         "xsl" : "nest"
    },  
    "plugins" : [ "themes", "xml_data" ]  
});


        //code to expand all nodes


       $("#ufvExpandAll").bind("click", function() {
    isExpandAll= true;
    $("#TreePanel").jstree("open_all", selectedNode);
    isExpandAll= false;
  });

      //code to collapse all nodes

$("#ufvCollapseAll").bind("click", function() {
    $("#TreePanel").jstree("close_all", selectedNode);
});

    //code to get the node and set on a variable on clicking a node

      var selectedNode;
$("#TreePanel").delegate("a", "click", function(e, data) {
    var node = $(e.target).closest("li");
    if (selectedNode != undefined && selectedNode != null) {
        $("#" + selectedNode.id + " > a").removeClass("jstree-default-             selected-node");
    }
    selectedNode = node[0];
    $("#" + selectedNode.id + " > a").addClass("jstree-default-selected-                 node");
        $("#ufvExpandAll").attr("disabled", false);
    $("#ufvCollapseAll").attr("disabled", false);
    return false;
});

提前致谢

问候哈里

4

1 回答 1

1

在执行逻辑以加载子节点之前,尝试检查节点以查看它是否有任何预先存在的子节点。

.bind("open_node.jstree", function (event, data) {
  var node = $(data.rslt.obj);
  var children = $.jstree._reference(node)._get_children(node);
  if (children.length==0){
    //node is empty, so do node open logic here
  }
})
于 2012-04-12T19:59:36.643 回答