关于 ext 动态树的搜索,大家众所周知的两种方法,一种是仿造 ext api 的做法,通过
expandAll 来实现查找,这种方式,对于小数据量还好,还有一个问题是,它自带的有
bug,搜索一下就有 bug 了。本文比较推荐的是第二种搜索方式,通过 expandPath 的方式。
详细步骤如下:(Xxx 表示你的实体类对象)
1、 搭好 SSH 框架
2、 导入 ext 的文件
3、 造好树形结构的数据库(expandPath 方式是通过路径查找,所以数据里里造了一个字
段 Path)
比如部门表:id,parentId(上级部门 ID),name(部门名字),descripon(部门描
述),path(部门路径)(path 的存储方式如下,如果是根节点就为空,如果是根节点
下面的,就是“/0”,假设根节点的 id 为 0----就是所有父节点 id,不包括自己,以“/0/5/12”
的方式存储着),建好该部门的实体类 xxx.java。
4、 树的构造省略
5、 写好前台 js 文件,代码如下:
//树结构
var tree = new Ext.tree.TreePanel( {
id : 'departTree',
region : "west",
width : 300,
collapsible: true,
rootVisible:true,
tbar:[ new Ext.form.TextField({
width: 240,
emptyText:'快速检索',
enableKeyEvents: true,//给输入框绑定 keyup 事件,需要加
上 enableKeyEvents:true 才能让 extjs 的 textfield 代理鼠标事件
listeners:{
keyup:function(node, event) {
//此处就是调用路径查找的方法
findByKeyWordPath(node, event);
},
scope: this
}
}),{
cls: 'icon-expand-all',
tooltip: '展开',
handleMouseEvents : false,
handler: function(){ tree.expandAll(); },
scope: this
}, '-', {
cls: 'icon-collapse-all',
tooltip: '收缩',
handleMouseEvents : false,
handler: function(){ tree.collapseAll(); },