谈一谈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/laoyeye/p/7306974.html。
谈一谈EasyUI中TreeGrid的过滤功能的更多相关文章
- 谈一谈EasyUI的TreeGrid的过滤功能
写在最前面 这个星期一直在纠结easyui的treegrid的过滤功能,原因呢,自然是项目中一个莫名奇妙的需求. easyui虽说是后端程序员的前端框架,但是说句实话,除去api,让我直接写里面的节点 ...
- Jquery EasyUI中treegrid
Jquery EasyUI中treegrid的中右键菜单和一般按钮同时绑定事件时的怪异事件 InChatter系统开源聊天模块前奏曲 最近在研究WCF,又因为工作中的项目需要,要为现有的系统增加一 ...
- easyUI中treegrid组件构造树形表格(简单数据类型)+ssm后台
这几天做的项目要求用树形表格的形式展示一部分数据,于是就想到了使用easyUI的treegrid组件,但几经翻查各种资料,发现数据类型大多采取标准数据类型,即包含children元素的数据类型,小编查 ...
- Jquery EasyUI中treegrid的中右键菜单和一般按钮同时绑定事件时的怪异事件
做个项目使用jquery easyui来做前端,也许是对此不是很熟悉,总是发现一些不可理解的事件. 主要源代码如下: <script type="text/javascript&qu ...
- EasyUI中Treegrid节点的删除
// 删除function removes() { var rows = ruletreegrid.treegrid('getSelections'); if (rows &&am ...
- 第二百二十八节,jQuery EasyUI,TreeGrid(树形表格)组件
jQuery EasyUI,TreeGrid(树形表格)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 TreeGrid(树形表格)组件的使 ...
- [Qt]自定义表头实现过滤功能
1. 写在前面 过滤功能源自项目上交互优化用户体验,在表头添加过滤符号实现过滤,替换以往在表格上方占用一行过滤项进行过滤. 2. 过滤提示 过滤提示就是三态图标(normal,hover,press) ...
- 【ASP.NET MVC系列】浅谈NuGet在VS中的运用
一 概述 在我们讲解NuGet前,我们先来看看一个例子. 1.例子: 假设现在开发一套系统,其中前端框架我们选择Bootstrap,由于选择Bootstrap作为前端框架,因此,在项目中,我们 ...
- 浅谈MFC类CrackMe中消息处理函数查找方法
最近一个学姐发给我了一份CrackMe希望我解一下,其中涉及到了MFC的消息函数查找的问题,就顺便以此为例谈一下自己使用的消息函数查找的方法.本人萌新,如果有任何错漏与解释不清的地方,欢迎各路大佬指正 ...
随机推荐
- centos7启动过程及systemd祥细说明
开机启过程 POST->BOOT SEQUENCE-> BOOTLOADER->KERNEL + INITRAMFS(INITRD)->ROOTFS->/sbin/ini ...
- vue错误和解决方法
1.Error in render function: "TypeError: Cannot read property 'matched' of undefined 原因:之前不知道,在引 ...
- mybatis入门介绍一
首先介绍一下Mybatis是什么?mybatis是Java的持久层框架, JAVA操作数据库是通过jdbc来操作的,而mybatis是对jdbc的封装. 使用mybatis之后,开发者只需要关注sql ...
- echarts_部分图表配置_dataZoom精确控制显示数据数量
echarts为我们提供了dataZoom组件,当数据过多时就有了它的用武之地,业务场景:数据返回100调可是为了前端显示效果默认只显示20条,其他数据由dataZoom控制显示隐藏: functio ...
- 嵌入式linux网络配置
在开发阶段需要用tftp等开发工具,这时就要配置Linux网络,首先确保windows网络IP地址为固定IP, 1.假设windows IP地址为19.168.2.10子网掩码:255.255.255 ...
- IAT重定向之修复
.. 仅允许非商业转载,转载请注明出处
- Orleans稍微复杂的例子—互动
这是Orleans系列文章中的一篇.首篇文章在此 我费力费心的翻译过官方的教程,但是本人英语词汇量不高,可是架不住电子词典啊-只要肯花时间,我这些内容谁都可以做出来.所以这个事例告诉我们一个道理,那就 ...
- shell编程之echo printf 命令
shell中 echo 和printf 都能用作输出,printf可以算是echo的增强版 显示转义字符 echo \""abcdef\"" >>& ...
- opencv 基本绘图函数
opencv 常用的数据结构和函数 颜色空间转换函数 cvtColor 函数 cvtColor 函数是opencv 中的颜色空间转换函数.可以实现rgb向hsv hsi等颜色空间的转换,也可以转换成灰 ...
- python——内置函数和匿名函数
内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这 ...