zTree异步加载时,所有节点isParent设为true,点击打开后出现undefined子节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zTree异步加载时,所有节点isParent设为true,点击打开后出现undefined子节点相关的知识,希望对你有一定的参考价值。

上图是运行效果,点击打开后回出现undefined子节点,但是当把async设为false时就不会出现这种情况了。
问题:
1、为什么异步加载会出现上述错误,而同步加载就不会呢?
2、如果保持使用异步加载,该怎么解决上述问题呢?
3、实际操作中发现,将“集团-公司-部门-小组”的树状结构的数据库表设计为“id name pId”,在后台不容易对特定节点进行isParent和open控制,那么将数据库表设计为什么样子比较便于对树节点的增删改查等操作呢?

将“集团-公司-部门-小组”的树状结构的数据库表设计为“id name pId”,这种方式是可以的啊,后台异步加载时,根据id获取其子节点的个数,如果大于0,则设置isParent=true,我们项目中就是这样实现的追问

但是按你说的方法,那么子节点个数为0的节点的图标就不是文件夹了呀。。。

参考技术A function zTreeOnAsyncSuccess(event, treeId, treeNode, msg)
if("undefined" === msg)
return false;

;
请求成功的方法里面后台判断如果没有子目录传个msg的值过来返回false就不会生成了
参考技术B 请问你解决了吗?我也碰上了这个问题:当把async设为false时,击打开后才不出现undefined子节点,请问你当时怎么解决的呢

ztree 异步加载 节点点击事件无触发 只有第一次刷新的时候才加载!

代码:
var setting =
async:
enable: true,
url: "BDSys_List.ashx?&action=userTree",
asyncParam: ["id", "pId", "name"], //异步调用时传到后台的参数
otherParam: "otherParam": "zTreeAsyncTest" ,
dataFilter: filter

;
function filter(treeId, parentNode, childNodes)
for (var i = 0; i < childNodes.Rows.length; i++)
childNodes.Rows[0]['open'] = true;
childNodes.Rows[i]['id'] = i;
childNodes.Rows[i]['pId'] = 0;
childNodes.Rows[i]['name'] = childNodes.Rows[i]['DeviceID'];

return childNodes.Rows;

var zTree, HoldID;
$(function ()
seadMsg_add.attr("disabled", true);
$("#layout").ligerLayout( leftWidth: 180, topHeight: '95%', width: '95%', space: 2 );
$.fn.zTree.init($("#userTree"), setting);

参考技术A 多看api吧。

以上是关于zTree异步加载时,所有节点isParent设为true,点击打开后出现undefined子节点的主要内容,如果未能解决你的问题,请参考以下文章

Jquery树控件ZTree异步加载

ztree异步加载

jquery zTree 查找所有的叶子节点

ztree 异步加载 节点点击事件无触发 只有第一次刷新的时候才加载!

zTree异步加载展开第一级节点

ztree中怎样获取选中节点的父节点及自己的index