EXTJS4扩展实例:如何使用filter查询treepanel
我们在使用普通的store时,extjs提供了filterBy,filter等多种方法来过滤数据达到查询效果,但在treepanel中的streeStore却没有实现这个查询,于是,就有了这篇文章。
首先定义一个类'MyExtend.lib.TreeFilter'
Ext.define('MyExtend.lib.TreeFilter', {
	filterByText: function(text) {
		this.filterBy(text, 'text');
	},
	/**
	 * 根据字符串过滤所有的节点,将不符合条件的节点进行隐藏.
	 * @param 查询字符串.
	 * @param 要查询的列.
	 */
	filterBy: function(text, by) {
		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,并混入这个类
Ext.define('MyTreePanel',{
	extend:'Ext.tree.Panel',
	mixins:['MyExtend.lib.TreeFilter']
});
后面的代码我就省略了,用你定义的MyTreePanel来生成一个treepanel,然后使用
treepanel.filterByText('xxx') 或treepanel.filterBy('xxx','列名') 进行过滤查询
EXTJS4扩展实例:如何使用filter查询treepanel的更多相关文章
- EXTJS4扩展实例:一个调用Ext.picker.Color的颜色选择菜单
		
运行环境:Extjs4.2.1 运行效果: 调用代码: Ext.require(['MyExtend.Form.Field.ColorField']); Ext.onReady(function() ...
 - Java学习-039-源码 jar 包的二次开发扩展实例(源码修改)
		
最近在使用已有的一些 jar 包时,发现有些 jar 包中的一些方法无法满足自己的一些需求,例如返回固定的格式,字符串处理等等,因而需要对原有 jar 文件中对应的 class 文件进行二次开发扩展, ...
 - 实例讲解MySQL联合查询
		
好了终于贴完了MySQL联合查询的内容了,加上上一篇一共2篇,都是我转载的,实例讲解MySQL联合查询.那下面就具体讲讲简单的JOIN的用法了.首先我们假设有2个表A和B,他们的表结构和字段分别为: ...
 - Filter查询
		
Filter查询 filter是不计算相关性的,同时可以cache,因此,filter速度要块于query 数据准备 POST /lib3/user/_bulk{"index":{ ...
 - js 扩展实例
		
//扩展实例1 字符串中首字符转大写 var test=' this is '; String.prototype.mytrim=function(){ var re=/^\s+(.*?)\s+$/; ...
 - Lucene6去掉了Filter但是可以用BooleanQuery实现Filter查询
		
Lucene在6.0版本之后彻底废除了Filter的使用,采用BooleanQuery来实现Filter的功能,核心代码如下: TermQuery termQuery = new TermQuery( ...
 - 51单片机 | 并行I/O口扩展实例(74LS244/74LS373/4071)
		
并行I/O口扩展实例 //<51单片机原理及应用(第二版)——基于Keil C与Proteus>第四章例4.4 I/O口不能完全用于输入/输出操作,当需要扩展外部存储器时,P0.P2口用作 ...
 - Django的filter查询
		
Django的filter查询 name__contains表示精确大小写的模糊查询 使用name__icontains表示忽略大小写 year_count = DownloadFile.object ...
 - Elasticsearch(5) --- Query查询和Filter查询
		
Elasticsearch(5) --- Query查询和Filter查询 这篇博客主要分为 :Query查询和Filter查询.有关复合查询.聚合查询也会单独写篇博客. 一.概念 1.概念 一个查询 ...
 
随机推荐
- Apache Server Status详解
			
Apache的日志如果靠分析日志或者查看服务器进程来监视Apache运行状态的话,比较繁冗.不过在Apache 1.3.2及以后的版本中就自带一个查看Apache状态的功能模块server-statu ...
 - 使用Btrace来动态监控方法的参数和返回值
			
btrace简介: btrace是一种动态跟踪分析一个运行中的Java应用程序的工具,它基于java的探针技术动态地向目标应用程序的字节码注入追踪代码(字节码追踪),这些追踪字节码追踪代码使用Java ...
 - Cracking the Coding Interview(String and array)
			
1.1实现一个算法判断一个字符串是否存在重复字符.如果不能利用另外的数据结构又该如何实现? My solution: /** *利用类似一个hash table的计数 *然后检查这个hash tabl ...
 - facebook login issue
			
If enable the facebook account in settings, when change account can't open the session. -(void)fbRes ...
 - C# 批量上传
			
完整例子下载 效果: 前台: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="d ...
 - android中SimpleCursorAdapter _id错误的问题
			
作为一个android新手,在绑定数据的时候是这样的 ListView listview=(ListView)this.findViewById(R.id.listView1); XJDal xj=n ...
 - [深入浅出Cocoa]iOS网络编程之Socket
			
http://blog.csdn.net/kesalin/article/details/8798039 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] [深入浅出Co ...
 - IOS开发 REST请求 ASIHTTPRequest用法
			
ASIHTTPRequest类库简介和使用说明 官方网站: http://allseeing-i.com/ASIHTTPRequest/ .可以从上面下载到最新源码,以及获取到相关的资料. 使用iOS ...
 - 提取ipa里面的资源图片
			
有时候发现个不错的UI,就想扒出来看看,ipa里的图片你知道的,都不能直接用,所以找到两个方法:一.用python转换1.将ipa文件后缀改为zip,然后解压缩.2.新建一个文件夹,将解压后的包里的p ...
 - python nose测试框架中使用allure_report框架
			
在使用nose自带的xunit生成xml文件生成测试报告后,领导说报告不够炫,没有百分比效果,且在web自动化时的截图不美观,html很多情况下没有显示图片(nose框架截图方法这里),正好,allu ...