Extjs4.x Ext.tree.Panel 过滤Filter以及trigger field的使用
Extjs4.x中已经取消了组件Ext.Tree.TreeFilter功能,却掉了树形结构的过滤功能,要实现该功能只能自己写了.
Tree节点筛选UI很简单,一个Tbar,一个trigger即可解决问题,剩下的是逻辑代码了。
1.tbar没啥好解析的
2.trigger几个比较重要的属性
triggerCls:文本框右侧的按钮样式,主要有4种
x-form-clear-trigger // the X icon
x-form-search-trigger // the magnifying glass icon
x-form-trigger // the down arrow (default for combobox) icon
x-form-date-trigger // the calendar icon (just in case)
onTriggerClick:单击右侧按钮的事件
emptyText:值为空时候显示的文字
hideTrigger:是否显示触发按钮
更多请参考:http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.field.Trigger-cfg-hideTrigger
3.剩下最重要的一个是逻辑处理类
完整的案例代码如下:
Ext.define("WMS.view.Tree", {
extend: 'Ext.tree.Panel',
alias: 'widget.wmsTree',
id: 'wmsMenuTreePanel',
title: "功能导航",
margins: '0 0 0 3',
width: 200,
region: 'west',
animate: true,
store: 'VPTreeMenu',
autoScroll: true,
rootVisible: false,
loadMsg: true,
collapsible: true,//是否可以折叠
split: true,
tools: [{
type: 'expand',
handler: function () { Ext.getCmp("wmsMenuTreePanel").expandAll(); }
}, {
type: 'collapse',
handler: function () { Ext.getCmp("wmsMenuTreePanel").collapseAll(); }
}],
//这里不要忘记
mixins: {
treeFilter: 'WMS.view.TreeFilter'
},
tbar: [{
xtype: 'trigger',
triggerCls: 'x-form-clear-trigger',
onTriggerClick: function () {
this.setValue('');
Ext.getCmp("wmsMenuTreePanel").clearFilter();
},
width:'100%',
emptyText:'快速检索功能',
enableKeyEvents: true,
listeners: {
keyup: {
fn: function (field, e) {
if (Ext.EventObject.ESC == e.getKey()) {
field.onTriggerClick();
} else {
Ext.getCmp("wmsMenuTreePanel").filterByText(this.getRawValue());
}
}
}
}
}]
});
/**
* Add basic filtering to Ext.tree.Panel. Add as a mixin:
* mixins: {
* treeFilter: 'WMS.view.TreeFilter'
* }
*/
Ext.define('WMS.view.TreeFilter', {
filterByText: function(text) {
this.filterBy(text, 'text');
},
/**
* Filter the tree on a string, hiding all nodes expect those which match and their parents.
* @param The term to filter on.
* @param The field to filter on (i.e. 'text').
*/
filterBy: function(text, by) {
this.clearFilter();
var view = this.getView(),
me = this,
nodesAndParents = [];
// Find the nodes which match the search term, expand them.
// Then add them and their parents to 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]);
// Hide all of the nodes which aren't in 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]);
}
});
如果你想对节点的中文做些处理,例如按照拼音首字母进行搜索,只需要变更如下这句代码即可
currNode.data[by].toString().toLowerCase().indexOf(text.toLowerCase()) > -1 更多扩展,可以自己修改类 WMS.view.TreeFilter
Extjs4.x Ext.tree.Panel 过滤Filter以及trigger field的使用的更多相关文章
- Extjs4.x Ext.tree.Panel 遍历当前节点下的所有子节点
Ext.define('WMS.controller.Org', { extend: 'Ext.app.Controller', stores: ['OrgUser', 'OrgTree'], mod ...
- Extjs学习笔记--Ext.tree.Panel
Ext.create('Ext.tree.Panel', { title: 'Simple Tree', width: 200, height: 150, store: store, rootVisi ...
- Ext.tree.Panel Extjs 在表格中添加树结构,并实现节点移动功能
最近在用Extjs 做后台管理系统,真的非常好用.总结的东西分享一下. 先展示一下效果图 好了,开始吧! 首先说一下我的创建结构: 一.构造内容 这个函数中包括store的创建,treePanel的创 ...
- Ext.tree.Panel实现单选,多选
Extjs var productCategoryTreeLookUpFn = function(callback) { var productCategoryLookUpWindow; var pr ...
- ExtJS4.2 Ext.grid.panel Store更改后刷新表格
//////////////////////// // Prepare store //////////////////////// // prepare fields and columns var ...
- Ext.tree.Panel
initComponent : function() { var data = null; Ext.Ajax.request({ url : 'xxx/xx', ...
- EXTJS4扩展实例:如何使用filter查询treepanel
我们在使用普通的store时,extjs提供了filterBy,filter等多种方法来过滤数据达到查询效果,但在treepanel中的streeStore却没有实现这个查询,于是,就有了这篇文章. ...
- Extjs-树 Ext.tree.TreePanel 动态加载数据
先上效果图 1.说明Ext.tree.Panel 控件是树形控件,大家知道树形结构在软件开发过程中的应用是很广泛的,树形控件的数据有本地数据.服务器端返回的数据两种.对于本地数据的加载,在extjs的 ...
- ExtJS 4 在Ext.tab.Panel中使用Ext.ux.IFrame打开url指向的网页
ext-4.2.1.883\examples\ux\IFrame.js ext-4.2.1.883\examples\ux\TabCloseMenu.js 复制到 \Scripts\ext-4.2.1 ...
随机推荐
- 学习Git---20分钟git快速上手
学习Git-----20分钟git快速上手 在Git如日中天的今天,不懂git都不好意思跟人说自己是程序猿.你是不是早就跃跃欲试了,只是苦于没有借口(契机). 好吧,机会就在今天. 给我20分钟,是 ...
- [Golang] 从零开始写Socket Server(1): Socket-Client框架
版权声明:本文为博主原创文章,未经博主允许不得转载. 第一次跑到互联网公司实习 ..感觉自己进步飞快啊~第一周刚写了个HTTP服务器用于微信公共号的点餐系统~ 第二周就直接开始一边自学Go语言一边写用 ...
- [LeetCode] Meeting Rooms I & II
Meeting Rooms Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s ...
- Django使用manage.py备份与恢复数据
Django dumpdata and loaddata django database model dumpdata dumpdata command It is a django manageme ...
- 如何正确的重写equals() 和 hashCode()方法
比较两个Java对象时, 我们需要覆盖equals和 hashCode. public class User{ private String name; private int age; priva ...
- Redis为什么使用单进程单线程方式
Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写.官方提供的数据是可以达到100000+的qps.这个数据不比采用单进程多线程的同样基于内存的KV数据库Memcached ...
- 【小白的CFD之旅】25 二维还是三维
小白最近逛图书馆,发现最近关于Fluent的书是越来越多了,而且还发现这些关于Fluent教材中的案例都大同小异.小白接受小牛师兄的建议,找了一本结构比较鲜明的书照着上面的案例就练了起来.不过当练习的 ...
- For循环语句解析
偶然一次看见for循环语句,就对i++和++i(这里假设增值为1)有点疑问,这个以前就遇到过,长时间不去想,就又忘了,这里记忆一下. for循环的一般格式为: for(表达式1:表达式2:表达式3) ...
- lua的模块加载require
加载指定的模块.首先函数会在 package.loaded 这个表中查看是否已经加载 了 modname 这个模块.如果是,那么 require 会返回保存在 package.loaded[modna ...
- 关于linux上cron服务的python封装工具
关于cron:定时任务服务,一般linux自带且已启动.(pgrep cron查看cron服务是否启动了.) 关于plan:一个通过python来定制cron服务的工具.其官网:http://plan ...