jquery使用EasyUI Tree异步加载JSON数据(生成树)


Posted in Javascript onFebruary 11, 2017

这几天因为工作需要,要做一个支持无限级的菜单。

我也是菜鸟一只,能想到的东西不多,所以用了Easy UI的tree组件。

不得不说,easyui确实很强大。

因为是无限级菜单,数据量可能有点大,所以考虑采用异步加载。

但是因为后台默认传来的数据是 一个实体,所以又在后台进行了JSON字符串拼接。

最后,在网上找了N多代码,然后又去问了好几个群里的网友,终于搞出来这个小东西。

一、HTML部分代码

<div id="categoryChooseDiv" title="请选择分类"
      style="width: 650px; height: 300px;">
       <ul id="MyTree"></ul>
  </div>

html部分很简单,只要放一个ul就可以了。

二、JS部分代码

function showCategory(){
      $('#MyTree').tree({  
         checkbox: false,  
         url: '/category/getCategorys.java?Id=0',  
         onBeforeExpand:function(node,param){ 
           $('#MyTree').tree('options').url = "/category/getCategorys.java?Id=" + node.id;
         },        
        onClick:function(node){
          var state=node.state;
           if(!state){                  //判断当前选中的节点是否为根节点
             currentId=node.id;
            $("#chooseOk").attr( "disabled" , false );  //如果为根节点 则OK按钮可用
            }else{
            $("#chooseOk").attr( "disabled" , true );  //如果不为根节点 则OK按钮不可用
            }
          } 
      });
  }

最后几句代码是因为我这个项目需要,只有选择到最下级节点的时候,才运行点击“确定”。否则不允许。
当用户点击确定的时候,需要获取 当前用户选中节点 的所有父节点

var nodes=[];      //定义数组用来存放各个节点名称
      var node =$("#MyTree").tree("getSelected"); //当前选中节点
      nodes.push(node.text);            //首先放入当前节点
      var pnode = $('#MyTree').tree('getParent',node.target); //获取当前节点的父节点
      while(pnode!=null){
        nodes.push(pnode.text);          //依次放入各个父节点,直到根节点为止
        pnode = $('#MyTree').tree('getParent',pnode.target);
      }
      nodes.reverse();             //数组元素倒序排序
      $.each(nodes,function(){        //循环取值
        var html=this;
          $("#inCategoryDiv").html( $("#inCategoryDiv").html() + html + ">>" );
      });

其实,主要问题在于后台对数据的处理,即如何能够转化为 easyui tree才可以识别的JSON数据。

三、后台代码(Java)

public ResponseEntity<String> findBy(Integer Id ) {
    List<Category> categorys = getcategorys(Id );
    String ss="";
    ss+="[";
    for( Category category : categorys )
       {
       ss+="{";
       //ss += "\"id\": \""+category.getId()+"\",\"text\": \""+category.getName().toString()+"\",\"iconCls\": \"icon-ok\",\"state\": \"closed\"";;
       List<Category> cs = getcategorys( category.getId() );  //判断当前节点是否还有子节点
       if(cs.size()==0){ //没有子节点 设置 state 为空
       ss+=String.format("\"id\": \"%s\", \"text\": \"%s\", \"iconCls\": \"\", \"state\": \"\"", category.getId() , category.getName());
       }else{    // 还有子节点 设置 state为closed
       ss+=String.format("\"id\": \"%s\", \"text\": \"%s\", \"iconCls\": \"\", \"state\": \"closed\"", category.getId() , category.getName());
      }
       ss+="},";
       }
       ss=ss.substring(0, ss.length() - 1); 
       ss+="]";
      return super.responseString(ss); //字符编码转换
    }

大致一个流程就是前台传来ID,然后获取到实体对象,然后对实体进行循环,然后进行字符串处理这里设置state的意义主要在于让 easyui 的tree可以知道当前节点是否为最低级节点,然后在前面显示不同的图标。

总结:

就是这个小东西,折腾了我好几天,呵呵,因为俺太笨了。不过还好最后搞懂了,也理解了很多东西。

以前一直觉得JSON这东西很神秘,现在觉得它还是有规律的。

使用easyui tree的重点之一,就是对JSON数据的处理,有两种方式可以实现:第一就是使用String的format方法。这个大家可以去网上参考一下相关的API等等,我第一次写错了,字符串的占位符应该是 %s  我写成了 {0} 找了半天,才知道问题所在。 第二种方式,就是我上面注释掉的那一行,直接使用字符串拼接。

然后上面获取当前节点的所有父节点的时候,又纠结了半天,去网上找了很多代码,都不能用,最后还是自己想了一招,才得以解决。

优点:可以使用异步加载,支持无限级。

缺点:太繁琐,对后台的数据格式要求过高。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
浅谈JavaScript中面向对象技术的模拟
Sep 25 Javascript
返回对象在当前级别中是第几个元素的实现代码
Jan 20 Javascript
一个挺有意思的Javascript小问题说明
Sep 26 Javascript
js怎么终止程序return不行换jfslk
May 30 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
Mar 02 Javascript
JS取模、取商及取整运算方法示例
Oct 13 Javascript
Bootstrap 3 进度条的实现
Feb 22 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
Jul 19 Javascript
Angular5中提取公共组件之radio list的实例代码
Jul 10 Javascript
微信小程序实现发送验证码按钮效果
Dec 20 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
Apr 24 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
Jul 28 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
Feb 11 #Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 #Javascript
JavaScript表单验证的两种实现方法
Feb 11 #Javascript
jQuery实现复制到粘贴板功能
Feb 11 #Javascript
js实现PC端和移动端刮卡效果
Mar 27 #Javascript
js实现短信发送倒计时功能(正则验证)
Feb 10 #Javascript
BootStrap select2 动态改变值的方法
Feb 10 #Javascript
You might like
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
php blowfish加密解密算法
2016/07/02 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
用javascript做拖动布局的思路
2008/05/31 Javascript
jquery 实现的全选和反选
2009/04/15 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
Position属性之relative用法
2015/12/14 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
2019/07/29 Javascript
Vue中常用rules校验规则(实例代码)
2019/11/14 Javascript
python使用PyCharm进行远程开发和调试
2017/11/02 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
简单分析python的类变量、实例变量
2019/08/23 Python
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
家长学校实施方案
2014/03/15 职场文书
文秘个人求职信范文
2014/04/22 职场文书
签约仪式策划方案
2014/06/02 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
法人委托书范本
2014/09/15 职场文书
安全生产月宣传标语
2014/10/06 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
初中教师个人工作总结
2015/02/10 职场文书
入伍通知书
2015/04/23 职场文书