转载: http://blog.csdn.net/xiaobai51509660/article/details/36011899

Extjs4.2中,对于treeStore中未实现filterBy函数进行实现,treestore并未继承与Ext.data.Store,对于treePanel的过滤查询功能,可有以下两种实现思路:

一:FilterBy函数

实现思路:

1)对于treestore 结构类型,extjs提供了专门的迭代函数cascadeBy函数,用于对树型节点进行迭代

2)迭代树型结构,在回调函数中,判断是否存在所查询内容,如果存在,将节点的id数组里。

3)再次迭代树型结构,将不在数据里的节点进行隐藏。

4)每次查询过程中,将所有节点设置可见。

注:在extjs中,对于界面元素的操作,可利用Ext.dom.Element对界面元素dom进行显示操作。

首先定义一个类'MyExtend.lib.TreeFilter'

  1. /**
  2. * Created by bcm on 14-6-30.
  3. */
  4. Ext.define('Juliet.util.TreeFilter', {
  5. filterByText: function(text) {
  6. this.filterBy(text, 'text');
  7. },
  8. /**
  9. * 根据字符串过滤所有的节点,将不符合条件的节点进行隐藏.
  10. * @param 查询字符串.
  11. * @param 要查询的列.
  12. */
  13. filterBy: function(text, by) {
  14. debugger;
  15. this.clearFilter();
  16. var view = this.getView(),
  17. me = this,
  18. nodesAndParents = [];
  19. // 找到匹配的节点并展开.
  20. // 添加匹配的节点和他们的父节点到nodesAndParents数组.
  21. this.getRootNode().cascadeBy(function(tree, view) {
  22. var currNode = this;
  23. if (currNode && currNode.data[by] && currNode.data[by].toString().toLowerCase().indexOf(text.toLowerCase()) > -1) {
  24. me.expandPath(currNode.getPath());
  25. while (currNode.parentNode) {
  26. nodesAndParents.push(currNode.id);
  27. currNode = currNode.parentNode;
  28. }
  29. }
  30. }, null, [me, view]);
  31. // 将不在nodesAndParents数组中的节点隐藏
  32. this.getRootNode().cascadeBy(function(tree, view) {
  33. var uiNode = view.getNodeByRecord(this);
  34. if (uiNode && !Ext.Array.contains(nodesAndParents, this.id)) {
  35. Ext.get(uiNode).setDisplayed('none');
  36. }
  37. }, null, [me, view]);
  38. },
  39. clearFilter: function() {
  40. var view = this.getView();
  41. this.getRootNode().cascadeBy(function(tree, view) {
  42. var uiNode = view.getNodeByRecord(this);
  43. if (uiNode) {
  44. Ext.get(uiNode).setDisplayed('table-row');
  45. }
  46. }, null, [this, view]);
  47. }
  48. });

  接下来定义一个你自己的treepanel,并混入这个类

1
2
3
4
5
Ext.define('MyTreePanel',{
    extend:'Ext.tree.Panel',
    mixins:['MyExtend.lib.TreeFilter']
     
});

调用方法:treepanel.filterByText('xxx') 或treepanel.filterBy('xxx','列名') 进行过滤查询

实现结果图:

二:searchTables函数

实现思路:

1)循环迭代树型结构,利用正则表达式进行匹配,对于匹配的节点进行展开并选中。

2)再以此迭代节点的子节点,匹配节点进行展开并选中。

  1. // treepanel 模糊查询 ,展开树型结构,选中匹配项
  2. function searchTables(tree,value){
  3. tree.forEach(function(e){
  4. var content = e.raw.text;
  5. var re = new RegExp(Ext.escapeRe(value), 'i');
  6. if(re.test(content)||re.test(content.toUpperCase())){
  7. e.parentNode.expand();
  8. var tabllepanel=Ext.ComponentQuery.query('auditruleview treepanel[name=dataTables]')[0];
  9. var selModel = tabllepanel.getSelectionModel();
  10. selModel.select(e,true);
  11. if(!e.isLeaf()){
  12. e.expand();
  13. }
  14. }
  15. searchTables(e.childNodes,value);
  16. });
  17. }

实现效果图

Extjs tree 过滤查询功能的更多相关文章

  1. Extjs treePanel过滤查询功能【转】

    Extjs4.2中,对于treeStore中未实现filterBy函数进行实现,treestore并未继承与Ext.data.Store,对于treePanel的过滤查询功能,可有以下两种实现思路: ...

  2. 在ASP.NET Core中通过EF Core实现一个简单的全局过滤查询

    前言 不知道大家是否和我有同样的问题: 一般在数据库的设计阶段,会制定一些默认的规则,其中有一条硬性规定就是一定不要对任何表中的数据执行delete硬删除操作,因为每条数据对我们来说都是有用的,并且是 ...

  3. 在Winform界面中使用DevExpress的TreeList实现节点过滤查询的两种方式

    在我较早的一篇随笔<在DevExpress程序中使用TeeList控件以及节点查询的处理>中,介绍了在树形列表TreeList控件上面,利用SearchControl实现节点的模糊查询过滤 ...

  4. 【设计过程】.NET ORM FreeSql WhereDynamicFilter 动态表格查询功能

    前言 最近几乎每天40度,越热越不想面对电脑,还好开源项目都比较稳定没那么多待解决问题,趁着暑假带着女儿学习游泳已略有小成.游泳好处太多了,建议有孩子的都去学学,我是在岸边指导大约一周左右就学会了,目 ...

  5. 创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段

    创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段 添加查询功能 本文将实现通过Name查询用户信息. 首先更新GetAll方法以启用查询: public async ...

  6. 完善ext.grid.panel中的查询功能(紧接上一篇)

    今天的代码主要是实现,Ext.grid.panel中的查询,其实我也是一名extjs新手,开始想的实现方式是另外再创建一个新的grid类来存放查询出的数据(就是有几个分类查询就创建几个grid类),这 ...

  7. WebService和AngularJS实现模糊过滤查询

    WebService和AngularJS实现模糊过滤查询   [概要] 网上看到一个不错的帖子,用WebService获取json,然后在前端使用AngularJs进行过滤搜索,看完文章后,按自己的想 ...

  8. FreeSql 新查询功能介绍

    FreeSql FreeSql 是一个功能强大的 NETStandard 库,用于对象关系映射程序(O/RM),提供了 CodeFirst/DbFirst/CURD/表达式函数/读写分离 等基础封装. ...

  9. Vc数据库编程基础MySql数据库的表查询功能

    Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...

随机推荐

  1. 湘潭校赛 Easy Wuxing

    Easy Wuxing Accepted : 25   Submit : 124 Time Limit : 1000 MS   Memory Limit : 65536 KB 题目描述 “五行”是中国 ...

  2. 高并发第六弹:线程封闭(ThreadLocal)

    当访问共享的可变数据时,通常需要使用同步.一种避免使用同步的方式就是不共享数据.如果仅在单线程内访问数据,就不需要同步.这种技术被称为线程封闭. 它其实就是把对象封装到一个线程里,只有一个线程能看到这 ...

  3. 软件架构系列一:C4模型

    本文要点预览:因为软件系统的分布式特点以及开发团队的分布性,了解软件架构的基础变得越来越重要.而在过度设计和毫无设计之间,我们应该把注意力放在对软件系统有重大影响的决策和权衡上.好的架构师应该是团队的 ...

  4. 关于DNS缓存

  5. 【代码笔记】iOS-cell自动变化大小

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  6. php递归获取分类结构

    商城的菜单通常都是树状结构,我们来模仿实现以下. 原理都是相同的,所以我们来个简单点的结构就行.层级只有两层,有两大类:手机和电脑:每个大类下面分别有三个子类: //从数据库获取的分类数据(省略获取步 ...

  7. Git——克隆部分文件

    在进行项目开发的时候,有时候会有这样的需求那就是:我们只希望从Git仓库里取指定的文件或者文件夹出来.在SVN里面,这非常容易实现,因为SVN基于文件方式存储,而Git却是基于元数据方式分布式存储文件 ...

  8. 配置ftp服务器只能上传不能进行其他操作

    又到期末考试了,今年当了数据挖掘助教,课程有一道编程大作业,需要搭建ftp服务器,实现文件上传,但是禁止下载重命名.服务器系统是ubuntu12.04 server,使用的ftp服务器也是linux下 ...

  9. PHP isset()与empty()的使用区别

    PHP的isset()函数 一般用来检测变量是否设置 格式:bool isset ( mixed var [, mixed var [, ...]] ) 功能:检测变量是否设置 返回值: 若变量不存在 ...

  10. House of Roman 实战

    前言 这是前几天国外一个 老哥 提出的一种思路 ,学习了一下感觉其中的堆布局的手法还不错,做个分享与记录. 这种利用手法的主要特点是不需要 leak libc的地址,通过 堆内存的布局 和 堆相关的漏 ...