ztree 添加节点

来源:互联网 发布:淘宝短信链接 编辑:程序博客网 时间:2024/05/01 12:28

最近在做的项目中有关ztree的开发,遇到了一个问题,当弹出ztree树的时候,是这样的:这个时候点击新增按钮,会弹出一个隐藏的框框,添加完信息后,把新添加的节点添加到ztree树中。

可是在调用addNodes方法的时候会出现节点添加两次的现象,大家在网上可能会找到很多有关ztree添加节点重复的问题,这个我就不提了。

现在给出不一样的解决方案,我们首先知道,为什么会出现重复添加的问题。

原因在于:我们异步加载了一次,然后再addNodes 这样就添加了两个节点。(这里如果我们调用展开节点方法,expendNode 这个方法貌似是不好使的,我也没搞清楚这是为什么,当我们调用reAsyncChildNodes方法的时候会自动展开树)

所以本人就不去调用addNodes方法了,这样就不会出现重复添加的问题了,但是怎么才能把添加的节点自动勾选上呢?

这个真是个问题,所以采用后台添加的方式:

async:{
            autoParam:["id"],
            enable:true,
            url : getUrl
        }

在ztree的属性中添加这个,其中的getUrl为自己定义的一步方法的url。

这里先提供自身在弹出页面填写后ajax返回的操作方法:

if($("#customerForm").valid()){
        $('#customerForm').ajaxSubmit({
            type:"post",
            dataType: "json",
            async : false,
            url: '${ctx}/system/cusCustomerInfo/saveAndReturnJSON.action',
            success: function(data){
                var oldNode = zTreeObj.getNodeByParam("id",$("#customerId").val());
                if(oldNode){
                    oldNode.checked = false;
                    zTreeObj.updateNode(oldNode);
                }
                $("#customerId").val(data.id);
                var node = zTreeObj.getNodeByParam("id",data.companyProfession);
                node.isParent = true;
                zTreeObj.reAsyncChildNodes(node, "refresh");
                closeAddDiv();
            }
        });
    }else{
        $.watermark.showAll();
    }

这里会看见, $("#customerId").val(data.id); 这个赋值就个为了下方  zTreeObj.reAsyncChildNodes(node, "refresh");刷新的时候调用一步方法的url的参数。

function getUrl(treeId,treeNode){
    var idsStr = pId == '1' ? $("#customerId").val() : $("#partcId").val();
    return "${ctx}/system/cusContactInfo/toSetCustomerToContact.action?idsStr="+idsStr;

红色字体就是自动选中的隐藏域id。

这时在后台遍历添加上checked=true就ok了。}