ztree的pid如何获取最准确了

Jun_Lemon 发布于 2014/11/05 17:28
阅读 3K+
收藏 0

@zTree 你好,想跟你请教个问题:

我看ztree demo上addHoverDom里获取pid = treeNode.id。但是我数据库里的id主键是自增的,中间有一部分数据被删除掉了,所以从21到71之间是没有数据的,因此,当连续添加新的节点时,会出现的情况是:

第一个添加的节点数据是正确的,即,id=71,parent(pid)= 16,但是第二个就开始不对了:id=72,parent(pid)=22,通过上述方法pid= treeNode.id取出来的pid居然是22,但数据库里并没有22这个id值,请问应该用什么方法得到的pid最准确呢。

数据表如下(parent即pid):


addHoverDom函数的代码如下:

function addHoverDom(treeId, treeNode) {
            var sObj = $("#" + treeNode.tId + "_span");
            if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0) return;
            var addStr = "<span class='button add' id='addBtn_" + treeNode.tId
                + "' title='add node' onfocus='this.blur();'></span>";
            sObj.after(addStr);
            var btn = $("#addBtn_"+treeNode.tId);
            if (btn) btn.bind("click", function(){
                var zTree = $.fn.zTree.getZTreeObj("treeDemo");
                //zTree.addNodes(treeNode, {id: newCount, pId:treeNode.id, name:"new node"});
                var pId = treeNode.id;
                //var id = zNodes.length + newCount;
                var name = "new node";
                var level = treeNode.level + 2 ;
                var url = "AddNode";
                var data = {};
                //data['id'] = id;
                data['name'] = name;
                data['pId'] = pId;
                data['level'] = level;
                $.ajax({
                    type:"POST",
                    url:url,
                    data:data,
                    success: function(msg){
                        alert("节点名称添加成功");
                    }
                });
                zTree.addNodes(treeNode, {id: (zNodes.length + newCount), pId:treeNode.id, name:"new node"});
                return false;
            });
        };



加载中
0
littleant
littleant

参考下JfinalUIB的代码吧:

执行逻辑,点击新增按钮时,生成一个节点名称(任意),然后传到后台保存,后台返回数据库ID值,然后创建节点(此时父节点ID和本节点ID都有了,包括名称)

http://git.oschina.net/dongcb678/JfinalUIB/blob/master/JFinalUIB/WebContent/WEB-INF/view/platform/department/tree.html  

Jun_Lemon
Jun_Lemon
回复 @littleant : 恩恩,自定义了一下id的数据,就OK了!
littleant
littleant
回复 @Jun_Lemon : 大哥,data数据是自定义的,可以是任何数据,你纠结啥呢,排序和名称存库了,返回的是数据库主键ID,Node节点的ID是需要自己生成控制的,不然哪来的你上面的问题?
Jun_Lemon
Jun_Lemon
回复 @littleant : 请教你一个问题,我看了你的代码,其中有一段:zTree.addNodes(treeNode, {id : data, pId : treeNode.id, name : addName}); 这里面id:data,这个data不是所有返回的数据么?这样赋给id起什么作用? 另外:之前给oderIds的赋值又有什么用呢?
Jun_Lemon
Jun_Lemon
恩,知道了,非常感谢!继续学习ing。有问题请不吝赐教啊。
littleant
littleant
再提醒你一下 zTree.addNodes 应该在最后调用,明白不?
0
zTree
zTree

1. zTree 绝对不会自行修改 id 的值,只会在使用简单数据模式下修正 pId 的值

2. id: (zNodes.length + newCount) 你的代码中新节点的 id 是这么计算出来的, 这本身就有问题吧?

0
Jun_Lemon
Jun_Lemon

引用来自“zTree”的评论

1. zTree 绝对不会自行修改 id 的值,只会在使用简单数据模式下修正 pId 的值

2. id: (zNodes.length + newCount) 你的代码中新节点的 id 是这么计算出来的, 这本身就有问题吧?

是的,正如你所说的,zTree不会自行修改id值,我之所以没有得到正确的pid是因为ajax没有把返回的数据传给前端,前端的数据依旧是初始的值,后来我把得到的数据返回后并重新初始化tree,就得到正确的pid了。非常感谢你!

代码如下:

function addHoverDom(treeId, treeNode) {
            var sObj = $("#" + treeNode.tId + "_span");
            if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0) return;
            var addStr = "<span class='button add' id='addBtn_" + treeNode.tId
                + "' title='add node' onfocus='this.blur();'></span>";
            sObj.after(addStr);
            var btn = $("#addBtn_"+treeNode.tId);
            if (btn) btn.bind("click", function(){
                var zTree = $.fn.zTree.getZTreeObj("treeDemo");
                zTree.addNodes(treeNode, {id: 100, pId:treeNode.id, name:"new node"});
                var pId = treeNode.id;
                //var id = zNodes.length + newCount;
                var name = "new node";
                var level = treeNode.level + 2 ;
                var url = "AddNode";
                var data = {};
                //data['id'] = id;
                data['name'] = name;
                data['pId'] = pId;
                data['level'] = level;
                $.ajax({
                    async: false,
                    type:"POST",
                    url:url,
                    data:data,
                    success: function(data){
                        zNodes=JSON.parse(data);
                        $.fn.zTree.init($("#treeDemo"), setting, zNodes);
                        alert("节点添加成功");
                    }
                });
                //zTree.addNodes(treeNode, {id: (), pId:treeNode.id, name:"new node"});
                return false;
            });
        };



返回顶部
顶部