写在最前面

这个星期一直在纠结easyui的treegrid的过滤功能,原因呢,自然是项目中一个莫名奇妙的需求。

easyui虽说是后端程序员的前端框架,但是说句实话,除去api,让我直接写里面的节点信息的话,还真是无从下手,在这里先对前端的同学膜拜下。

说下需求吧,最近一个项目中有个界面使用的easyui的treegrid展示,起初是没什么问题的,但是随着数据的导入发现实际操作上十分不便。原因呢是开发的时候treegrid并没有做分页的处理,目前测试环境数据达到456条,想从中找到一条然后处理的话,只能说费时费力了。于是便产生了开发个过滤搜索功能的想法。

起初感觉还是简单调用下api什么的,因为我记得datagrid就有个datagrid-filter.js官方扩展,但是查遍api手册,还是没有发现treegrid有什么现成的方法。只找到了两个属性,loader和loadFilter,好像有点什么关系。

期间我也看了下网上的解决方法,不知道是不是太简单了,网上关于TreeGrid过滤的资源很少。博问里也都被大牛无视了。~~~~(>_<)~~~~

解决思路

这里列举一个在园子里看到的文章,其他也没有找到类似相关的内容了

可以查询根节点和具体子节点的信息,开始使用EasyUI的TreeGrid的loadData 加载url的方式不能实现查询功能,于是利用异步AJAX查询了一下数据返回后,赋值给变量,然后利用TreeGrid的loadData加载这个json格式的返回结果实现了对TreeGrid的查询功能,代码如下,来源地址:http://www.cnblogs.com/mikel/archive/2011/11/16/2250812.html

  1. function searchROM() {
  2.  
  3. var product = $('#Product').combobox('getValue');
  4. var keytype = $('#keytype').combobox('getValue');
  5. var keywords = $('#keywords').val();
  6. var url = encodeURI('/GoodsROM/ROMList?product=' + product + '&keytype=' + keytype + '&keywords=' + keywords+'&'+Math.random());
  7. $.post(url, {}, function(data) {
  8. var d = data;//返回json格式结果
  9. $('#grid').treegrid('loadData',d);//加载数据更新treegrid
  10. }, 'json');
  11.  
  12. }

想法是很好的,但是奈何,我们后端的代码是封装在General里的,改后台代码影响很多,于是还是想到api,试试刚开始的loader和loadFilter吧。

  1. loadFilter:function(data){
  2. var newData = new Array();
  3. var filter = $("#filter").val();
  4. for(var i=0; i<data.length; i++){
  5. if(data[i].nodeName.indexOf(filter)>0){
  6. // 定义一个数组
  7. newData.push(data[i]);
  8. }
  9. }
  10. if(newData.length==0){
  11. return data;
  12. }else{
  13. return newData;
  14.  
  15. }
  16. },

我在查询出的结果上做过滤,返回处理后的结果,通过load方法重新加载。

效果不出所望,查询功能是实现了,但是因为每次查询都需要load一次数据库,本来页面初始化时数据的查询时长就达到20s,查一次来20s查一次来20s,谁受得了,结果自然被领导无情的打回了。

沿着这个思路继续找,既然访问数据库可以实现,那我是不是在页面初始化第一次的时候将数据存起来呢,所以我这次在loadFilter里就没有做逻辑的验证了,只是把data值取出来,然后将逻辑处理放在另外的函数里,功夫不负有心人,效果终究还是实现了,只是在初始化的时候查一次数据库,其他的搜索就不在load数据库了。下面贴出相关的代码给大家参考,有更好的想法的同学还请给个思路哈,这个先拜谢了。

  1. var allData = new Array();
  2. function doOrgChartInit(idTreeGrid, idMenu, idUriQuery) {
  3. var bFound = true;
  4. $('#' + idTreeGrid).treegrid({
  5. rownumbers:true,
  6. animate:true,
  7. collapsible:true,
  8. fitColumns:true,
  9.  
  10. url:idUriQuery,
  11. idField:'nodeId',
  12. treeField:'nodeName',
  13. loadFilter:function(data){
  14. if (bFound&&data[0].nodeName!="Root") {
  15. allData = data;
  16. bFound = false;
  17. }
  18. return data;
  19. },
  20. columns:[
  21. [
  22. {halign:'center', align:'left',field:'nodeName', title:'名称', width:200},
  23. {halign:'center', align:'left',field:'description', title:'描述', width:100, align:'center'}
  24. ]
  25. ],
  26.  
  27. // ----------------------------------------------------------------------------------- 工具栏
  28. toolbar:[
  29. {
  30. // 刷新
  31. iconCls:'icon-reload',
  32. handler:function () {
  33. doTreeGridRefresh(idTreeGrid);
  34. }
  35. },
  36. '-',
  37. {
  38. // 扩展当前结点
  39. iconCls:'icon-redo',
  40. handler:function () {
  41. doTreeGridExpand(idTreeGrid);
  42. }
  43. },
  44. '-',
  45. {
  46. // 收缩当前结点
  47. iconCls:'icon-undo',
  48. handler:function () {
  49. doTreeGridCollapse(idTreeGrid);
  50. }
  51. },
  52. '-',
  53. {
  54. // 搜索框
  55. text: '<input id="filter" type="text" />',
  56.  
  57. },
  58. {
  59. // 搜索
  60. iconCls:'icon-search',
  61. handler:function () {
  62. doFilter(idTreeGrid);
  63. }
  64. }
  65. ],
  66.  
  67. // ----------------------------------------------------------------------------------- 弹出菜单
  68. onContextMenu:function (e, row) {
  69. e.preventDefault();
  70. $(this).treegrid('select', row.nodeId);
  71. // alert(row.orgChartPk);
  72. vOrgChartPk = row.orgChartPk;
  73. $('#' + idMenu).menu('show', {
  74. left:e.pageX,
  75. top:e.pageY
  76. });
  77. }
  78. });
  79. }
  80.  
  81. function doFilter(idTreeGrid) {
  82. var newData = new Array();
  83. var filter = $("#filter").val();
  84. if (allData.length==0) {
  85. alert("请先点击Root初始化界面");
  86. return false;
  87. }
  88. for(var i=0; i<allData.length; i++){
  89. if(allData[i].nodeName.indexOf(filter)>0){
  90. // 定义一个数组
  91. newData.push(allData[i]);
  92. }
  93. }
  94. if (filter=="") {
  95. $('#' + idTreeGrid).treegrid('loadData',allData);
  96. }else{
  97. $('#' + idTreeGrid).treegrid('loadData',newData);
  98. }
  99. }

 只是记录下自己的思路,写的有点乱还请见谅。转载还请注明出处:http://www.cnblogs.com/allanzhang/p/7306974.html

谈一谈EasyUI的TreeGrid的过滤功能的更多相关文章

  1. 谈一谈EasyUI中TreeGrid的过滤功能

    写在最前面 这个星期一直在纠结easyui的treegrid的过滤功能,原因呢,自然是项目中一个莫名奇妙的需求. easyui虽说是后端程序员的前端框架,但是说句实话,除去api,让我直接写里面的节点 ...

  2. 第二百二十八节,jQuery EasyUI,TreeGrid(树形表格)组件

    jQuery EasyUI,TreeGrid(树形表格)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 TreeGrid(树形表格)组件的使 ...

  3. easyUI中treegrid组件构造树形表格(简单数据类型)+ssm后台

    这几天做的项目要求用树形表格的形式展示一部分数据,于是就想到了使用easyUI的treegrid组件,但几经翻查各种资料,发现数据类型大多采取标准数据类型,即包含children元素的数据类型,小编查 ...

  4. Jquery EasyUI中treegrid

    Jquery EasyUI中treegrid的中右键菜单和一般按钮同时绑定事件时的怪异事件 InChatter系统开源聊天模块前奏曲   最近在研究WCF,又因为工作中的项目需要,要为现有的系统增加一 ...

  5. 谈一谈Java8的函数式编程(二) --Java8中的流

    流与集合    众所周知,日常开发与操作中涉及到集合的操作相当频繁,而java中对于集合的操作又是相当麻烦.这里你可能就有疑问了,我感觉平常开发的时候操作集合时不麻烦呀?那下面我们从一个例子说起. 计 ...

  6. 谈一谈泛型(Generic)

    谈一谈泛型 首先,泛型是C#2出现的.这也是C#2一个重要的新特性.泛型的好处之一就是在编译时执行更多的检查. 泛型类型和类型参数 ​ 泛型的两种形式:泛型类型( 包括类.接口.委托和结构 没有泛型枚 ...

  7. 从一张图开始,谈一谈.NET Core和前后端技术的演进之路

    从一张图开始,谈一谈.NET Core和前后端技术的演进之路 邹溪源,李文强,来自长沙.NET技术社区 一张图 2019年3月10日,在长沙.NET 技术社区组织的技术沙龙<.NET Core和 ...

  8. 谈一谈Elasticsearch的集群部署

      Elasticsearch天生就支持分布式部署,通过集群部署可以提高系统的可用性.本文重点谈一谈Elasticsearch的集群节点相关问题,搞清楚这些是进行Elasticsearch集群部署和拓 ...

  9. 谈一谈iOS事件的产生和传递

    谈一谈iOS事件的产生和传递 1.事件的产生 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中. UIApplication会从事件队列中取出最前面的事件,并将事件 ...

随机推荐

  1. js中的匿名函数自执行

    随笔,java中因为有修饰符的存在,那就有private类的存在,js不一样,没有修饰词一说,因此为了防止全局变量的污染,js中就出现了匿名函数,直接上code,看到的人可以自己体会: (functi ...

  2. Mathematica学习笔记2

    导入文件中的矩阵 mat = Import["...", "Table"] 转化为向量矩阵(元素为数对) data = Table[{mat[[i, j]], ...

  3. 【JS】jquery通知插件toastr

    toastr是一款非常棒的基于jquery库的非阻塞通知提示插件,toastr可设定四种通知模式:成功,出错,警告,提示,而提示窗口的位置,动画效果都可以通过能数来设置,在官方站可以通过勾选参数来生成 ...

  4. centos 7 部署Thinksns

    因为Thinksns是PHP项目,我们这里部署需要搭建Apache+mysql+php环境. 1.mysql的安装,这里使用yum安装可以解决很多依赖包的问题.由于centos 7 没有自带mysql ...

  5. (转载)oracle的v$sqlarea表

    原文摘自:http: [V$SQLAREA]  本视图持续跟踪所有shared pool中的共享cursor,在shared pool中的每一条SQL语句都对应一列.本视图在分析SQL语句资源使用方面 ...

  6. ReadAndWriteData

    /** * 读取和写入不同基本类型数据 * * @throws IOException */ public static void main(String[] args) throws IOExcep ...

  7. git命令小结

    注: 如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文 学习git文档推荐:http://www.liaoxuefeng.com/wiki/00137 ...

  8. Excel多表合并的宏

    Sub 合并当前目录下所有工作簿的全部工作表() Dim MyPath, MyName, AWbName Dim Wb As Workbook, WbN As String Dim G As Long ...

  9. mongoDB创建数据库用户

    运行mongo.exe >use demo //切换到要创建用户的数据库 >db.createUser({user: "admin",pwd: "admin& ...

  10. fedora下一些问题的解决方案汇总

    解决fedora下一些使用问题 一 解决fedora下无法使用Fn+功能键来调整亮度的问题 在fedora下,背光的配置参数在/sys/class/backlight文件夹下,根据不同的显卡,有不同的 ...