事情从最近项目上遇到点问题说起:
公司新接的项目上,由于分公司有上千家,导致原来的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年前的框架都完美兼容,当然也少不了我一整天的奋斗,

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

被折叠的 条评论
为什么被折叠?



