ztree 数据量较大时实现节点分级懒加载

配置:

var setting = {
            check: {
                enable: false
            },
            async: {
                enable: true,
                type: "get",
                headers: Util.getHeader(),
                url: URL ,
                autoParam: ["ID"],//多个参数用英文逗号隔开;
                otherParam: {"otherParam": "zTreeAsync"},
                dataFilter: filter
            },
            data: {
                //自定义数据结构
                key: {
                    name: "NAME",
                    isParent: "IS_PARENT",
                },
                simpleData: {
                    enable: true,
                    idKey: "ID",
                    pIdKey: "PARENT_ID",
                    //根节点ID
                    rootPId: '我是根节点ID'
                }
            },
            callback: {
                //树点击事件
                onClick: zTreeOnClick,
                //树延迟加载事件
                onAsyncSuccess: zTreeOnAsyncSuccess
            }
        };
        // 数据处理回调函数
        function filter(treeId, parentNode, childNodes) {
            //数据处理start ==
            if (!childNodes) return null;
            for (var i=0, l=childNodes.length; i

 方法实现:

    function zTreeOnAsyncSuccess(event, treeId, treeNode, msg) {
        if (!tree) {
            alert("error!");
            return
        }
        var selectedNode = tree.getSelectedNodes();
        var nodes = tree.getNodes();
        tree.expandNode(nodes[0], true);
    }

    //树节点的点击事件
    function zTreeOnClick(treeId, treeNode, clickFlag) {
        alert("点击!")
    };

 下面的根据自己所用框架见机行事:

        $.ajax({
            url: url,
            type: 'GET',
            data: 我是参数,
            //请求头中添加日志uuid
            headers: getHeader(),
            dataType: "json",
            async: !sync,
            timeout: 我是超时时间,
            beforeSend: function (xhr) {
                xhr.overrideMimeType("text/plain; charset=utf-8");
            },
            success: function (data, textStatus, xhr) {

                //主逻辑
                if (!data) {
                    return;
                }
				var result = data.RSP.DATA;
				//启动树节点
				tree = $.fn.zTree.init($("#treeDemo"), setting, result);
				var nodes = tree.getNodes();
				tree.expandNode(nodes[0], true, false);
               
            },
            error: function (xhr, textStatus, errorThrown) {
				alert("error!");
            }
        });

async 属性解析:

  • enable: true — 设置 zTree 是否开启异步加载模式
  • url:"./resource/json/getNodes.json" — Ajax 获取数据的 URL 地址
  • autoParam:["id", "name=name"] — 异步加载时(初始化时不需要)需要自动提交父节点属性的参数

            1、将需要作为参数提交的属性名称,制作成 Array 即可,例如:["id", "name"]

            2、可以设置提交时的参数名称,例如 server 只接受 zId : ["id=zId"]

  • otherParam:{"otherParam":"zTreeAsyncTest"} — Ajax 请求提交的静态参数(初始化请求、异步加载请求时都会有此参数)

                可以为空[ ],如果有 key,则必须存在 value。 例如:[key, value]

  • type: 'get' — 获取数据的方法
  • dataFilter: filter — 用于对 Ajax 返回数据进行预处理的函数

callback属性解析:

  • beforeClick: 方法名 - 用于捕获单击节点之前的事件回调函数,并且根据返回值确定是否允许单击操作
  • beforeAsync: 方法名 - 用于捕获异步加载之前的事件回调函数,zTree 根据返回值确定是否允许进行异步加载

  • onAsyncSuccess: 方法名 — 用于捕获异步加载正常结束的事件回调函数
  • onClick: 方法名 — 用于捕获节点被点击的事件回调函数

 

 

踩坑:如果没有设置autoParam,或者autoParam设置的不对,会出现zTree层级不对(比如每次点击子节点会多加载数据)

参考:https://www.cnblogs.com/zero-zm/p/9911573.html

 

 

你可能感兴趣的:(js)