Extjs tree 过滤查询功能
转载: 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'
- /**
- * Created by bcm on 14-6-30.
- */
- Ext.define('Juliet.util.TreeFilter', {
- filterByText: function(text) {
- this.filterBy(text, 'text');
- },
- /**
- * 根据字符串过滤所有的节点,将不符合条件的节点进行隐藏.
- * @param 查询字符串.
- * @param 要查询的列.
- */
- filterBy: function(text, by) {
- debugger;
- this.clearFilter();
- var view = this.getView(),
- me = this,
- nodesAndParents = [];
- // 找到匹配的节点并展开.
- // 添加匹配的节点和他们的父节点到nodesAndParents数组.
- this.getRootNode().cascadeBy(function(tree, view) {
- var currNode = this;
- if (currNode && currNode.data[by] && currNode.data[by].toString().toLowerCase().indexOf(text.toLowerCase()) > -1) {
- me.expandPath(currNode.getPath());
- while (currNode.parentNode) {
- nodesAndParents.push(currNode.id);
- currNode = currNode.parentNode;
- }
- }
- }, null, [me, view]);
- // 将不在nodesAndParents数组中的节点隐藏
- this.getRootNode().cascadeBy(function(tree, view) {
- var uiNode = view.getNodeByRecord(this);
- if (uiNode && !Ext.Array.contains(nodesAndParents, this.id)) {
- Ext.get(uiNode).setDisplayed('none');
- }
- }, null, [me, view]);
- },
- clearFilter: function() {
- var view = this.getView();
- this.getRootNode().cascadeBy(function(tree, view) {
- var uiNode = view.getNodeByRecord(this);
- if (uiNode) {
- Ext.get(uiNode).setDisplayed('table-row');
- }
- }, null, [this, view]);
- }
- });
接下来定义一个你自己的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)再以此迭代节点的子节点,匹配节点进行展开并选中。
- // treepanel 模糊查询 ,展开树型结构,选中匹配项
- function searchTables(tree,value){
- tree.forEach(function(e){
- var content = e.raw.text;
- var re = new RegExp(Ext.escapeRe(value), 'i');
- if(re.test(content)||re.test(content.toUpperCase())){
- e.parentNode.expand();
- var tabllepanel=Ext.ComponentQuery.query('auditruleview treepanel[name=dataTables]')[0];
- var selModel = tabllepanel.getSelectionModel();
- selModel.select(e,true);
- if(!e.isLeaf()){
- e.expand();
- }
- }
- searchTables(e.childNodes,value);
- });
- }
实现效果图
Extjs tree 过滤查询功能的更多相关文章
- Extjs treePanel过滤查询功能【转】
Extjs4.2中,对于treeStore中未实现filterBy函数进行实现,treestore并未继承与Ext.data.Store,对于treePanel的过滤查询功能,可有以下两种实现思路: ...
- 在ASP.NET Core中通过EF Core实现一个简单的全局过滤查询
前言 不知道大家是否和我有同样的问题: 一般在数据库的设计阶段,会制定一些默认的规则,其中有一条硬性规定就是一定不要对任何表中的数据执行delete硬删除操作,因为每条数据对我们来说都是有用的,并且是 ...
- 在Winform界面中使用DevExpress的TreeList实现节点过滤查询的两种方式
在我较早的一篇随笔<在DevExpress程序中使用TeeList控件以及节点查询的处理>中,介绍了在树形列表TreeList控件上面,利用SearchControl实现节点的模糊查询过滤 ...
- 【设计过程】.NET ORM FreeSql WhereDynamicFilter 动态表格查询功能
前言 最近几乎每天40度,越热越不想面对电脑,还好开源项目都比较稳定没那么多待解决问题,趁着暑假带着女儿学习游泳已略有小成.游泳好处太多了,建议有孩子的都去学学,我是在岸边指导大约一周左右就学会了,目 ...
- 创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段
创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段 添加查询功能 本文将实现通过Name查询用户信息. 首先更新GetAll方法以启用查询: public async ...
- 完善ext.grid.panel中的查询功能(紧接上一篇)
今天的代码主要是实现,Ext.grid.panel中的查询,其实我也是一名extjs新手,开始想的实现方式是另外再创建一个新的grid类来存放查询出的数据(就是有几个分类查询就创建几个grid类),这 ...
- WebService和AngularJS实现模糊过滤查询
WebService和AngularJS实现模糊过滤查询 [概要] 网上看到一个不错的帖子,用WebService获取json,然后在前端使用AngularJs进行过滤搜索,看完文章后,按自己的想 ...
- FreeSql 新查询功能介绍
FreeSql FreeSql 是一个功能强大的 NETStandard 库,用于对象关系映射程序(O/RM),提供了 CodeFirst/DbFirst/CURD/表达式函数/读写分离 等基础封装. ...
- Vc数据库编程基础MySql数据库的表查询功能
Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...
随机推荐
- 【转】sql server日期比较
1. 当前系统日期.时间select getdate() 2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值例如:向日期加上2天select dateadd(day ...
- cefsharp 在anycpu下运行
从cefsharp57开始就支持anycpu了,不过需要一些设置: 1.首先要打开*.csprj文件,添加节点 <CefSharpAnyCpuSupport>true</CefSha ...
- ADO五大对象(转载)
来源:http://blog.csdn.net/u013201439/article/details/51111969 ADO五大对象(转载) 一.绪论 1.引言 在数据库应用系统中,必定要涉及到对数 ...
- Hive可视化工具
目前市面上的Hive可视化客户端工具,大都是C/S模式的,安装使用都不是太方便,目前有一款基于WEB的可视化工具TreeSoft,通过浏览器就可以访问使用了,并且可以同时管理.维护.监控MySQL,O ...
- python 软件管理规范
一.背景 软件开发是一个系统工程,当然编码实现是其中尤其重要的一个环节,关乎到功能需求的实现好坏.这个环节中除了编码这一硬功之外,与之相关的编码风格这一柔道,虽然没有直接决定功能的实现与否,但却在很大 ...
- CSS流体(自适应)布局下宽度分离原则——张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1463 一.简短的前言 ...
- Windows 安装 python MySQLdb模块
pip install wheel 去这个网站查找whl格式的MYSQL-python http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python ...
- Ubuntu添加源列表
1.首先备份源列表:sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup 2.清空原来的/etc/apt/sources.list,添加 ...
- 在Mac上用bootcamp安装windows,使用Android studio启动模拟器时蓝屏问题的解决方法
原链接 https://medium.com/@andrea.bresolin/windows-10-on-mac-with-boot-camp-making-intel-haxm-work-with ...
- ubuntu安装zeromq
官网地址:http://zeromq.org/ ubuntu下zmq安装 (1)下载:wget http://download.zeromq.org/zeromq-4.1.4.tar.gz (2)解压 ...