zoukankan      html  css  js  c++  java
  • Ztree加载完成默认选中根节点右侧生成表格

    需求:页面加载完成之后,默认选中ztree的根节点,并执行其点击方法,右侧生成表格;
    效果:如下图所示;
    思路:在节点点击事件clickNode方法中根据节点的部门code查询这个部门下的所有员工,并在右侧渲染layui表格。
    function clickNode(e,treeId,treeNode) {
        getUserList(treeNode);
    }
    function getUserList(treeNode) {
        table.render({
            .....
        });
    }
    这样的话在点击这个节点的时候在右侧生成表格是没有问题的,但是如果想在页面加载完成之后自动选中这个节点,并在右侧生成表格,就需要下面的代码:
    $(document).ready(function() { 
                    $.ajax({
                         type : "POST",
                         dataType : "json",
                         url :  "*****",
                         async : false,
                         success : function(data) {
                               zTree = $.fn.zTree.init($("#mytree"),  setting, data);
                               zTree.expandAll(zTree);
                               var treeObj =  $.fn.zTree.getZTreeObj("mytree"); //获取ztree对象
                               var node =  zTree.getNodeByParam('level', 0); // 获取根节点
                               treeObj.selectNode(node); // 选择节点
                               clickNode(null,  zTree.setting.treeId, node); // 调用事件方法
                         },
                         
                         error : function(error) {
                               layer.msg('数据加载失败!', {
                                    icon : 2,
                                    time : 1500
                               })
                         }
                    });
               });
    在加载完成后再执行点击事件的方法clickNode,理论上是可行的,但是执行代码的时候就会一直报错,table is not defined,原来是因为页面加载顺序问题,导致左边ztree先加载完成需要使用右边layui的table对象,作如下处理,ztree加载完成之后等待一秒钟让layui加载,再执行点击方法,代码如下:
    $(document).ready(function() {
                    $.ajax({
                         type : "POST",
                         dataType : "json",
                         url :  "*****",
                         async : false,
                         success : function(data) {
                               zTree = $.fn.zTree.init($("#mytree"),  setting, data);
                               zTree.expandAll(zTree);
                               var treeObj =  $.fn.zTree.getZTreeObj("mytree");
                               var node =  zTree.getNodeByParam('level', 0);
                               treeObj.selectNode(node); // 选择点
                               setTimeout(function(){
                                    clickNode(null,  zTree.setting.treeId, node); // 调用事件方法
                               },1000);    
                         },
                         error : function(error) {
                               layer.msg('系统错误!', {
                                    icon : 2,
                                    time : 1500
                               })
                         }
                    });
               });

    update  at 2018-12-17 14:57

    今天在测试过程中发现了一个更好的解决方法,layui的回调方法是在$().ready()方法之后执行的,那么也就是说在页面初始加载的时候如果先执行$().ready()方法里面的内容时可以的,但是如果这个方法里用到了layui里面的组件,那就会出现本文产生的问题。既然layui也是在页面完成之后再进行加载,那么我就想着这个方法是不是可以代替$().ready()?

    layui.config({
                base : '${ctx}/static/layuiadmin/'
            }).extend({
                index : 'lib/index'
            }).use([ 'index', 'table', 'layer', 'form' ], function() {
                var $ = layui.$;
                var form = layui.form;
                table = layui.table;
                form.render();
                
                loadDefaltTable();    
    });
    function loadDefaltTable() {
     $.ajax({
         type : "POST",
         dataType : "json",
         url :  "*****",
         async : false,
         success : function(data) {
           zTree = $.fn.zTree.init($("#mytree"),  setting, data);
           zTree.expandAll(zTree);
           var treeObj =  $.fn.zTree.getZTreeObj("mytree");
           var node =  zTree.getNodeByParam('level', 0);
           treeObj.selectNode(node); // 选择点
           clickNode(null,  zTree.setting.treeId, node); // 调用事件方法  
         },
       error : function(error) {
            layer.msg('系统错误!', {
                   icon : 2,
                    time : 1500
            })
       }
    });
    
    }

    于是我把上文的代码封装成方法,写到了layui的回调里,测试一波是可行的。这样如果页面上使用了layui的组件时就可以用layui的回调代替$().ready()方法。

  • 相关阅读:
    0313学习进度条
    0311 了解和熟悉操作系统实验
    学习进度条博客
    0302 关于就业的感想
    1230递归下降语法分析程序设计
    有限自动机的构造和识别
    评论
    C语言文法
    编译原理第二次作业——词法分析心得
    0428团队项目2.0
  • 原文地址:https://www.cnblogs.com/Kingram/p/9996994.html
Copyright © 2011-2022 走看看