谈一谈EasyUI的TreeGrid的过滤功能

写在最前面

这个星期一直在纠结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

function searchROM() {

        var product = $(‘#Product‘).combobox(‘getValue‘);
        var keytype = $(‘#keytype‘).combobox(‘getValue‘);
        var keywords = $(‘#keywords‘).val();
        var url = encodeURI(‘/GoodsROM/ROMList?product=‘ + product + ‘&keytype=‘ + keytype + ‘&keywords=‘ + keywords+‘&‘+Math.random());
        $.post(url, {}, function(data) {
            var d = data;//返回json格式结果
            $(‘#grid‘).treegrid(‘loadData‘,d);//加载数据更新treegrid
        }, ‘json‘);

    }

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

 loadFilter:function(data){
            var newData = new Array();
            var filter = $("#filter").val();
            for(var i=0; i<data.length; i++){
                if(data[i].nodeName.indexOf(filter)>0){
                    // 定义一个数组
                    newData.push(data[i]);
                }
            }
            if(newData.length==0){
                return data;
            }else{
                return newData; 

            }
        },

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

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

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

var allData = new Array();
function doOrgChartInit(idTreeGrid, idMenu, idUriQuery) {
    var bFound = true;
    $(‘#‘ + idTreeGrid).treegrid({
        rownumbers:true,
        animate:true,
        collapsible:true,
        fitColumns:true,

        url:idUriQuery,
        idField:‘nodeId‘,
        treeField:‘nodeName‘,
        loadFilter:function(data){
          if (bFound&&data[0].nodeName!="Root") {
              allData = data;
              bFound = false;
         }
            return data;
        },
        columns:[
            [
                {halign:‘center‘, align:‘left‘,field:‘nodeName‘, title:‘名称‘, width:200},
                {halign:‘center‘, align:‘left‘,field:‘description‘, title:‘描述‘, width:100, align:‘center‘}
            ]
        ],

        // -----------------------------------------------------------------------------------  工具栏
        toolbar:[
            {
//                刷新
                iconCls:‘icon-reload‘,
                handler:function () {
                    doTreeGridRefresh(idTreeGrid);
                }
            },
            ‘-‘,
            {
//                扩展当前结点
                iconCls:‘icon-redo‘,
                handler:function () {
                    doTreeGridExpand(idTreeGrid);
                }
            },
            ‘-‘,
            {
//                收缩当前结点
                iconCls:‘icon-undo‘,
                handler:function () {
                    doTreeGridCollapse(idTreeGrid);
                }
            },
            ‘-‘,
            {
//                搜索框
                text: ‘<input id="filter" type="text" />‘,

            },
            {
//                搜索
                iconCls:‘icon-search‘,
                handler:function () {
                    doFilter(idTreeGrid);
                }
            }
        ],

        // -----------------------------------------------------------------------------------  弹出菜单
        onContextMenu:function (e, row) {
            e.preventDefault();
            $(this).treegrid(‘select‘, row.nodeId);
//            alert(row.orgChartPk);
            vOrgChartPk = row.orgChartPk;
            $(‘#‘ + idMenu).menu(‘show‘, {
                left:e.pageX,
                top:e.pageY
            });
        }
    });
}

function doFilter(idTreeGrid) {
    var newData = new Array();
    var filter = $("#filter").val();
    if (allData.length==0) {
        alert("请先点击Root初始化界面");
        return false;
    }
    for(var i=0; i<allData.length; i++){
        if(allData[i].nodeName.indexOf(filter)>0){
            // 定义一个数组
            newData.push(allData[i]);
        }
    }
    if (filter=="") {
        $(‘#‘ + idTreeGrid).treegrid(‘loadData‘,allData);
    }else{
        $(‘#‘ + idTreeGrid).treegrid(‘loadData‘,newData);
    }
}

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

时间: 2024-08-28 10:03:29

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

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

jQuery EasyUI,TreeGrid(树形表格)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 TreeGrid(树形表格)组件的使用方法,这个组件依赖于 DataGrid(数据表格)组件. 一.加载方式 建立一个 JSON 文件 [ { "id": 1, "name": "系统管理", "date": "2015-05-10", &quo

谈一谈SQL Server中的执行计划缓存(上)

原文:谈一谈SQL Server中的执行计划缓存(上) 简介     我们平时所写的SQL语句本质只是获取数据的逻辑,而不是获取数据的物理路径.当我们写的SQL语句传到SQL Server的时候,查询分析器会将语句依次进行解析(Parse).绑定(Bind).查询优化(Optimization,有时候也被称为简化).执行(Execution).除去执行步骤外,前三个步骤之后就生成了执行计划,也就是SQL Server按照该计划获取物理数据方式,最后执行步骤按照执行计划执行查询从而获得结果.但查询

谈一谈商品编码的问题

如题:今天谈一谈商品编码的问题,我们不是完全从物流和商品本身的角度去谈商品该怎么编码才符合国际标准,EAN,UPC啥啥啥怎么样的.我们从计算机程序设计,电商,数据库存储的角度看一看商品编码,首先商品有哪些编码,然后这些编码和商品的关系,在然后这些编码该怎么使用.要从电商的角度了解商品,马上想到的可能是淘宝,天猫,京东,亚马逊等他们的商品是怎么样子,是怎么存储的. 这些这么成熟的电商完全可以参考和借鉴.关于商品这个话题还是太大,因为商品本身设计的东西太多了,不同活动先不同的价格,多规格商品,不同的

谈一谈软件BUG造成的严重危害

写下本文的原因是因为这是老师布置的一个作业,谈一谈自己在实际的软件开发过程中所遇到的.并对自己影响很大的bug.无奈的是,笔者是一个软件开发的初学者,接手过的项目实在有限,在自己编写的有限的代码中所遇到的bug多是由于粗心而引起的语法问题.符号问题.代码格式问题.这些虽然是小问题,但作为一个程序员,这些看似不起眼的“小问题”却可能引起程序不能运行,出错等一系列的“大问题”,所以作为初学者的我也要时刻提醒自己,不断检查,不断完善.在认识了bug的危害性之后,突然让我不禁想起一个有关bug造成恶劣影

【dotnet跨平台】谈一谈dotnet-cli开源社区的产品持续集成

?? [dotnet跨平台]谈一谈dotnet-cli开源社区的产品持续集成 进入其中一个PR:https://github.com/dotnet/cli/pull/2580 可以看到微软使用自己搭建的持续集成平台来保证产品和代码的质量,其中每一个即将整合代码到rel/1.0.0这个主分支的代码都要经过7个测试通过,其中2个windows平台,4个linux平台和一个OS X平台如下: Details Windows_NT x64 Release Build - Build finished.

谈一谈我最喜欢的诗人--法国诗人波德莱尔

很多时候我都沉醉于波德莱尔的诗集中....... 虽然我没有看过波德莱尔相关的信息,但是看他的诗,却能够让我感受到一颗炽烈的心再向生活中的种种现象作出了自己的反思和歇斯底里的抗议,虽然有点颓废,但是他一直都在努力地避免陷入生活中糟糕的状态,波德莱尔一直都在观察生活,向我们解释了生活中的种种细节方面的信息.波德莱尔似乎是倾向于社会主义的诗人,这一点我在他的诗中能够强烈地感受到这一点,因为他是反对资本主义糜烂的物质生活的.对于当下的我们也是一记警钟.为什么呢?当人陷入物质的海洋中却没有精神信仰的寄托

谈一谈APP版本号问题

如题:谈一谈APP版本号问题 为什么要谈这个问题,周五晚上11~12点,被微信点名,说APP有错,无效的版本号,商城无法下单.我正在准备收拾东西,周末回老家,结果看到这样问题,菊花一紧.我擦,我刚加的版本号检查,在加版本号检查前,我还跟统计的妹妹仔细核对了近半年来所有的版本号,怎么还会有问题.赶紧查,原来结果,看到了一个g1_2.5.5_65,在我的一再追问下说这个就是2.5.5的版本号.然后咱们来说一说为什么要加版本号检查,然后再说,为什么会加出问题来,最后在讨论一下版本号规则.题外话跟大家探

谈一谈几种处理 JavaScript 异步操作的办法

本文标签:   JavaScript 原生JavaScript优势 JavaScript异步 js的异步操作 回调函数 TensorFlow REST   服务器 引言 js的异步操作,已经是一个老生常谈的话题,关于这个话题的文章随便google一下都可以看到一大堆.那么为什么我还要写这篇东西呢?在最近的工作中,为了编写一套相对比较复杂的插件,需要处理各种各样的异步操作.但是为了体积和兼容性,不打算引入任何的pollyfill,甚至连babel也不允许使用,这也意味着只能以es5的方式去处理.使

谈一谈我在阿里的成长

前几天受阿里通信的同事邀请,分享了一个关于成长的话题.其实我不太热衷于分享此类话题,作为一个技术人,分享那些没有技术干货的内容总感觉有些怪怪的.但最后还是拟下了这个话题 ——<谈一谈我在阿里的成长>,所以本文主要是对分享的 PPT 做简述. 可以回首一下,毕业工作后的这段时间里,你做过哪些事情让自己感觉有了很大的成长? 我简单枚举了一下,主要是这几个方面: 涉足一个未知的领域,走进去,那就是成长:能够坚持不懈的完成一件事情,优化一个项目,那也是成长:能够沉淀方案,推广自己的想法,让更多的人收益