jQuery的zTree框架与部门树整合(动态加载)实例

本文介绍了在面临大数据量时,如何从js tree迁移到jQuery的zTree框架,以解决加载慢的问题。重点阐述了动态加载部门树的实现思路,包括如何处理已选节点的保存和去重策略,以及在父节点被选中时如何递归获取子节点。文章还分享了一天奋斗后的成功上线经验,并提供了java后台动态获取节点的代码片段。

事情从最近项目上遇到点问题说起:

        公司新接的项目上,由于分公司有上千家,导致原来的js tree框架对这么大数据量支持不好,显示慢,有时候甚至加载不出来。

        于是我琢磨着换一套框架,搜索后发现有一篇文章写得不错(http://blog.csdn.net/lilongsheng1125/article/details/25737463),于是搜索了jQuery的zTree说明,发现写得很详细,功能丰富,便将之进行改造成项目用的。

        先说说思路:部门树在表里的字段有parentDeptId,deptId,deptName,这就不用多说了,每个deptId对应一个parentDeptId,根节点的parentDeptId为0。如果某个业务逻辑需要在一张表里把匹配的部门ID存储进去,而下回可以对这些部门进行增加或删除,那么修改的时候必须将之前选中的打勾,但保存的时候存在个问题:因为是动态加载的,如果以前已经勾选的部门没被用户加载出来,那么保存这些部门数据的时候,若只根据zTree的“zTree.getCheckedNodes(true)”来取值(已经加载出来的被打勾的节点),那么没加载出来的已经勾上的将不被保存,导致保存数据错误。于是结合zTree的特性想到一个办法,将原先已经勾选的节点、已经加载出来的被打勾的节点、不被打勾的节点都传到后台,后台用一个HashSet先保存原先勾选的节点,再add进去修改后打勾的节点,再判断修改后没打勾的节点是否存在库里,若存在则remove之。这方法利用java中Set的不重复特性,实现完美去重。而保存部门的时候,若父部门节点被勾选,而不加载其子部门节点的时候,那么用sql的递归查询,将它的子部门也筛选出来,注意也要用Set去重。

总结:

        zTree框架确实做得很好,效率高,经测试万个部门节点正常加载,而且功能丰富、兼容性强,项目10年前的框架都完美兼容,当然也少不了我一整天的奋斗,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值