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;
//
alert(currNode.data[by]+' '+by+' '+text);
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]);
}
});
Ext.define('MyTreePanel',{
extend: 'Ext.tree.Panel',
mixins:[ 'MyExtend.lib.TreeFilter']
});
var treePanel
= Ext.create( 'MyTreePanel',
{
id: 'tree-panel',
title: 'Sample
Layouts',
region: 'center',
split: true,
height: 360,
minSize: 150,
rootVisible: false,
autoScroll: true,
store: store
});