Jstree - 如果在Jstree中检查父节点,如何检查子节点?

时间:2015-08-14 08:02:39

标签: javascript jquery ajax nodes jstree

如果我没有错,当使用jstree时,如果选中了父节点,那么它的子节点也会被检查。像这样enter image description here

我正在做的是,我正在进行ajax调用并仅加载父节点。我检查了父节点,当我展开父节点时,我正在进行另一个ajax调用并仅加载后续的子节点。调用之后,父节点保持选中状态,但其子节点未处于已检查状态。就像下图一样。

enter image description here

以下是我正在使用的代码:

$("#mytree").tree({
        ui : {
            theme_name : "checkbox"
        },
        plugins : { 
            checkbox : {
                real_checkboxes : true,
                real_checkboxes_names : function (n) { return [("check_" + (n[0].id || Math.ceil(Math.random() * 10000))), 1]; },
            }
        },
        data : {
            type : "json",              
            async : true,
            opts : { 
                method:"GET",
                url: "controller/getNodes"
            }   
        },
        callback : {
            beforedata: function(NODE,TREE_OBJ){
                return loadData(NODE,TREE_OBJ);
            }
        },
        selected : false,
        opened : "1"
    });

我要做的是,当我进行ajax调用以加载子节点时,在调用返回后,如果选中父节点,则还应检查其子节点。请帮帮我,怎么做?

这是loadData的代码:

function loadData(Node,treeModule){
var treeNode = treeModule.get(Node,"json","");  
var data="";
    try{
        data= treeNode.data.title;
    }catch(err){
        data="";
    }
var Code = null;
if(data == "" || data == "Loading ..."){
     Code = "";
}else{
try{
        Code = Node[0].attributes.code.value;
    }catch(e){}
}
return {"code":Code,"isdialog":"false"};

}

我正在寻找一个偶数或类似的东西。

2 个答案:

答案 0 :(得分:0)

请记住,您使用的是一个非常旧的jstree版本,多年来一直没有得到支持。迁移到v.3将解决您的所有问题(在您的情况下将检查新加载的节点),但是需要花费一些时间并阅读设置,因为v.3与v.1略有不同。

答案 1 :(得分:0)

如果选中父节点并且

,则在您的json对象中添加一个属性并从服务器端设置'true'

使用load_node.jstree事件设置复选框

.bind("load_node.jstree", function (event, data) { 
      data.inst.change_state('li[selected=selected]', false);
 })