• Jquery插件 之 zTree树加载


    原文链接:https://blog.csdn.net/jiaqu2177/article/details/80626730

    zTree树加载

    zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。

    在做项目的时候,我们经常能用到zTree,但是,有的时候,因为树数据过多,而导致树加载很慢,测试超过10000条数据就要加载3秒左右,如果有更多的数据,那用户的体验会是一个什么样子?

    今天也是在做项目的时候遇到这个问题,也就来做下笔记!

    1、查询数据

    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    @Override
    public List<User> findUserList(String areaCode) {
        //这里判断是不是第一次进来,如果是,赋给他顶级节点的ID
        if(StringUtils.isEmpty(areaCode)) {
            areaCode = "620000";
        }
        StringBuilder sql = new StringBuilder();
        sql.append("SELECT * FROM USER WHERE PART_ID = '" + areaCode + "'");
        //判断是否为第一次进来,如果是第一次,则查询顶级节点和下一级节点,如果不是,则只查询当前areaCode的子节点
        if("620000".equals(areaCode)) {
            sql.append("    OR ID = '620000'");
        }
        List<User> list = jdbcTemplate.query(sb.toString(), new Object[] {},new BeanPropertyRowMapper<User>(User.class));
        return list;

    根据以上的实现层,我们可以拿到数据的list集合,然后就是去拼接ztree需要的json格式数据。

    2、拼接 JSON 字符串

    @Autowired
    private UserService userService;
    
    //Controller层,推荐使用post
    @RequestMapping(value = "/zTree", method = RequestMethod.POST)
    public void areaTree(HttpServletRequest request, HttpServletResponse response) {
        //获取异步加载的条件ID
        String areaCode = request.getParameter("id");
        try {
            //获取查询到的数据
            List<User> list = userService.findUserList(areaCode);
            List<Map<String,String>> ztree = new ArrayList<Map<String, String>>();
            if (list != null && !list.isEmpty()) {
                int a = 0;
                //循环list 进行拼接 json 串
                for (User user : list) {
                    a++;
                    String id = String.valueOf(user.getId());
                    String pId = String.valueOf(user.getPartId());
                    Map<String, String> map = new HashMap<String, String>();
                    map.put("id", id);
                    map.put("pId",pId);
                    //这里可以根据自己的业务去筛选那些数据为父节点,那些为子节点
                    if(id.substring(id.length()-3, id.length()).equals("000")
                    {
                        map.put("isParent","true");//父节点
                    }else {
                        map.put("isParent","false");//子节点
                    }
                    map.put("name", user.getName());
                    map.put("title", user.getName());
                    map.put("viewtype", "1");
                    map.put("regiontype", "1");
                    if(a==1) {
                        map.put("open", "true");//是否展开
                    }else {
                        map.put("open", "false");
                    }
                    ztree.add(map);
                }
            }
            JSONArray array = JSONArray.fromObject(ztree);
            String json = array.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    这样,我们需要的 json 字符串就拼接出来了,下一步,就是要在页面进行显示!

    3、页面进行展示

    <!-- 树显示的位置 -->
    <ul id="ztree" class="ztree"></ul>
    
    <!-- 相关js和css引入省略 -->
    <script>
    $(function() {
        //初始化树菜单
        zTree = $.fn.zTree.init($("#ztree"), setting);
    });
    var zTree;
    var setting = {
        async: {
            enable: true,
            type:"post",
            dataType:'json',
            url:"/zTree",//我们之前写的Controller的地址
            //此处的id就是节点的id,每次点击之后,会自动根据节点的id去查询节点下的数据,此处写什么,在Controller中获取的name名称就是什么。
            //例如 String areaCode = request.getParameter("id");
            autoParam:["id"] 
        },
        callback: {
            onClick: zTreeOnClick, //树点击事件
            onAsyncSuccess: zTreeOnAsyncSuccess //树延迟加载事件
        },
        view:{
            dblClickExpand: false,
            showIcon: false, //树菜单的icon图标
        },
        data: {
            simpleData: {
                enable: true
            }
        }
    };
    var firstAsyncSuccessFlag = 0;
    
    function zTreeOnAsyncSuccess(event, treeId, treeNode, msg) {
        var arry = eval(msg);
        var sumProject=0; 
        if (arry.length > 0 && arry[0].res_level=="1") {
            for (var i = 0; i < arry.length; i++) {
                sumProject += parseInt(arry[i].sumProject);
            }
        }
        if (firstAsyncSuccessFlag == 0) {
            try {
                //调用默认展开第一个结点  
                var selectedNode = zTree.getSelectedNodes();
                var nodes = zTree.getNodes();
                zTree.expandNode(nodes[0], true);
                firstAsyncSuccessFlag = 1;
            } catch (err) {}
        }
    }
    //点击左侧树
    function zTreeOnClick(e, treeId, treeNode){
        //点击左侧树的ID
        var areaCode = treeNode.id;
        //点击左侧树的逻辑处理
    }
    </script>



  • 相关阅读:
    SharePoint提交前有效性验证
    showModalDialog/showModelessDialog弹出窗刷新例子
    在多选用户字段中查找是否存在某个用户(转自JianYi博客)
    SQL获得月第一天等
    SQL如何将Null不参与计算
    自定义Icon字段
    Backup Exec Remote Agent 在远程服务器上启动时挂起,一直显示Starting状态
    一个好用的日期控件My97DatePicker
    使用错误页统一处理错误(转)
    MS SQL游标的使用
  • 原文地址:https://www.cnblogs.com/isme-zjh/p/12017953.html
Copyright © 2020-2023  润新知