ztree 异步加载

     最近要用ztree插件生成一个部门人员的树形结构,之前全部用的简单数据格式全部请求到前台的方式加载树,现在由于数据量过大,加载时间过长,要改为异步加载。

一、准备工作

     引入对应的js和css,这里是ztree的官方下载地址:https://gitee.com/zTree/zTree_v3

     最新版本是3.5.37

二、前端核心代码

    这里直接借用了下载下来ztree项目的demo,文件路径在zTree_v3\demo\cn\core\async.html

<link rel="stylesheet" href="../../../css/demo.css" type="text/css">
<link rel="stylesheet" href="../../../css/zTreeStyle/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="../../../js/jquery.ztree.core.js"></script>

<h1>异步加载节点数据的树</h1>
<h6>[ 文件路径: core/async.html ]</h6>
<div class="content_wrap">
	<div class="zTreeDemoBackground left">
		<ul id="treeDemo" class="ztree"></ul>
	</div>
</div>
<SCRIPT type="text/javascript">
    var setting = {
        async: {
            enable: true,
            url:"http://127.0.0.1:8080/getTreeData",
            type:"post",
            dataType:"json",
            contentType:"application/x-www-form-urlencoded",
            autoParam:["id=pid"]
        },
        data:{
            key:{
                isParent : "isparent"
            },
            simpleData :{
                enable : true,
                idKey : "id",
                pIdKey : "pid",
                rootPId : "root"
            }
        },
    };
		
    $(document).ready(function(){
        $.fn.zTree.init($("#treeDemo"), setting);		
    });
</SCRIPT>

    这里有一个关键点是data中key isParent的设置,需要后端返回该节点是否是父节点,如果是父节点才能点击之后异步请求下一级的数据。查看ztree的api,需要v.3.5.32+才能支持,所以要下载最新版的ztree。

三、后台代码

     这里我用的是springboot,数据随便造的。这里的关键是对应前端的isParent,每一个节点数据都需要传isparent参数,实际中可能需要提前处理好这个参数或者通过数据库查询判断isparent参数为true还是false。

@RequestMapping(value = "getTreeData" ,method = {RequestMethod.GET, RequestMethod.POST})
public List<HashMap<String, Object>> getTreeData(HttpServletRequest request,HttpServletResponse response) {
    response.setHeader("Access-Control-Allow-Origin", "*");//应对跨域请求
    String pid = request.getParameter("pid");
    if(pid == null || pid == ""){//初始化节点的时候  默认查询最顶级的节点  即pid=0
        pid="0";
    }
    List<HashMap<String, Object>> list = new ArrayList<>();
    if(pid.equals("0")) {
        HashMap<String, Object> map1 = new HashMap<>();
        map1.put("id", 1);
        map1.put("pid", "root");
        map1.put("name", "一级部门");
        map1.put("isparent", true);
        list.add(map1);
    } else if(pid.equals("1")){
        HashMap<String, Object> map2 = new HashMap<>();
        map2.put("id", 2);
        map2.put("pid", 1);
        map2.put("name", "二级部门1");
        map2.put("isparent", true);
        list.add(map2);
			
        HashMap<String, Object> map3 = new HashMap<>();
        map3.put("id", 3);
        map3.put("pid", 1);
        map3.put("name", "二级部门2");
        map3.put("isparent", false);
        list.add(map3);
    } else if(pid.equals("2")) {
        HashMap<String, Object> map4 = new HashMap<>();
        map4.put("id", 4);
        map4.put("pid", 2);
        map4.put("name", "三级部门1");
        map4.put("isparent", false);
        list.add(map4);
			
        HashMap<String, Object> map5 = new HashMap<>();
        map5.put("id", 5);
        map5.put("pid", 2);
        map5.put("name", "三级部门2");
        map5.put("isparent", false);
        list.add(map5);
    }
    return list;
}

四、页面效果

          

     这里在后台打断点,是可以看到点击父节点之后,controller接受到了一次新的请求,传的参数是被点击父节点的id值,作为pid。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值