ExtJs复选框树,可实现节点选中自动选中父节点子节点(权限树)
2012-02-14 23:29
423 查看
废话不说先贴图,贴代码
![](http://hi.csdn.net/attachment/201112/13/0_1323771769uijc.gif)
index.js
[javascript] view
plaincopy
Ext.onReady(function(){
var extPanel = new Ext.ux.ExtendTreePanel({
title:'Extend TreePanel',
titleCollapse:false,
progressBar:new Ext.ProgressBar({
text:'Progress'
}),
bbar:[],
root:new Ext.tree.AsyncTreeNode({
id:'rootNode',
checked:false,
allowDrag:false,
leaf:false,
loader: new Ext.tree.TreeLoader(),
text:'Root Node',
children:[
{text:'Child1',
leaf:false,
checked:false,
children:[
{
text:'Child11',
leaf:true,
checked:false
},
{
text:'Child12',
leaf:true,
checked:false
}
]
},
{text:'Child2',
leaf:false,
checked:false,
children:[
{
text:'Child21',
leaf:true,
checked:false
},
{
text:'Child22',
leaf:true,
checked:false
}
]
}
]
})
});
var win = new Ext.Window({
title:'LoginWindow',
width:500,
height:400,
frame:true,
border:false,
layout:'fit',
draggable:false,
closable:false,
modal:true,
items:[
extPanel
]
});
win.show();
});
ExtendTreePanel.js
[html] view
plaincopy
Ext.namespace('Ext.ux');
ExtExt.ux.ExtendTreePanel = Ext.extend(Ext.tree.TreePanel,{
initComponent:function(){
this.addEvents(
'nodechecked'
);
this.addListener({
checkchange:{
fn:function(node,checked){
if(!node.loaded){//子节点是否加载
node.expand();
}
this.selectChildNodes(node,checked);//选定子节点
if(node.parentNode){
this.selectParentNodes(node,checked);//是否选定父节点
}
},
scope:this
},
render:{
fn:function(){
this.progressBar.setWidth(this.getBottomToolbar().el.getWidth()-5);
},
scope:this
},
resize:{
fn:function(){
this.progressBar.setWidth(this.getBottomToolbar().el.getWidth()-5);
},
scope:this
}
});
this.bbar.push(this.progressBar);
Ext.ux.ExtendTreePanel.superclass.initComponent.call(this);
},
selectChildNodes:function(Node,checked){
Node.eachChild(function(node){
node.attributes.checked = checked;
node.getUI().toggleCheck(checked);
if(!node.leaf){
if(!node.loaded){
node.expand();
}
this.selectChildNodes(node,checked);
}
},this);
},
...................
因为最近工作需要用到一个权限树,自己动手写的一个小小的插件,可实现节点选中时,自动搜索子节点并选中,自动遍历父节点,根据节点选中状态设置父节点当前的选中状态。本人ExtJS菜鸟,还请各位大虾指点。
![](http://hi.csdn.net/attachment/201112/13/0_1323771769uijc.gif)
index.js
[javascript] view
plaincopy
Ext.onReady(function(){
var extPanel = new Ext.ux.ExtendTreePanel({
title:'Extend TreePanel',
titleCollapse:false,
progressBar:new Ext.ProgressBar({
text:'Progress'
}),
bbar:[],
root:new Ext.tree.AsyncTreeNode({
id:'rootNode',
checked:false,
allowDrag:false,
leaf:false,
loader: new Ext.tree.TreeLoader(),
text:'Root Node',
children:[
{text:'Child1',
leaf:false,
checked:false,
children:[
{
text:'Child11',
leaf:true,
checked:false
},
{
text:'Child12',
leaf:true,
checked:false
}
]
},
{text:'Child2',
leaf:false,
checked:false,
children:[
{
text:'Child21',
leaf:true,
checked:false
},
{
text:'Child22',
leaf:true,
checked:false
}
]
}
]
})
});
var win = new Ext.Window({
title:'LoginWindow',
width:500,
height:400,
frame:true,
border:false,
layout:'fit',
draggable:false,
closable:false,
modal:true,
items:[
extPanel
]
});
win.show();
});
ExtendTreePanel.js
[html] view
plaincopy
Ext.namespace('Ext.ux');
ExtExt.ux.ExtendTreePanel = Ext.extend(Ext.tree.TreePanel,{
initComponent:function(){
this.addEvents(
'nodechecked'
);
this.addListener({
checkchange:{
fn:function(node,checked){
if(!node.loaded){//子节点是否加载
node.expand();
}
this.selectChildNodes(node,checked);//选定子节点
if(node.parentNode){
this.selectParentNodes(node,checked);//是否选定父节点
}
},
scope:this
},
render:{
fn:function(){
this.progressBar.setWidth(this.getBottomToolbar().el.getWidth()-5);
},
scope:this
},
resize:{
fn:function(){
this.progressBar.setWidth(this.getBottomToolbar().el.getWidth()-5);
},
scope:this
}
});
this.bbar.push(this.progressBar);
Ext.ux.ExtendTreePanel.superclass.initComponent.call(this);
},
selectChildNodes:function(Node,checked){
Node.eachChild(function(node){
node.attributes.checked = checked;
node.getUI().toggleCheck(checked);
if(!node.leaf){
if(!node.loaded){
node.expand();
}
this.selectChildNodes(node,checked);
}
},this);
},
...................
因为最近工作需要用到一个权限树,自己动手写的一个小小的插件,可实现节点选中时,自动搜索子节点并选中,自动遍历父节点,根据节点选中状态设置父节点当前的选中状态。本人ExtJS菜鸟,还请各位大虾指点。
相关文章推荐
- ExtJs复选框树,可实现节点选中自动选中父节点子节点(权限树)
- 在Winform中的TreeView控件,实现选中/取消选中父节点则自动选择/取消选中对应子节点
- js实现点中子节点父节点自动选中
- zTree实现单独选中根节点中第一个节点
- 在驱动模块初始化函数中实现设备节点的自动创建
- Ext 树级联选中子节点,包含怎么实现半选中状态
- 中国特色管理类软件项目开发之通用权限必杀技 -- 权限自由配置设定、实现智能化自动检测校验
- EasyUI的treegrid实现自动顺序选择行节点
- 一步一步SharePoint 2007之二十一:解决实现注册用户后,自动具备访问网站的权限的问题(3)——创建用户
- 使用spring事件驱动机制,实现权限信息的自动收集存库
- android 代码实现手机自动恢复出厂设置不需要权限
- 简洁常用权限系统的设计与实现(五):不维护节点的深度level,手动计算level,构造树
- 新浪微博插入话题后部分文字选中的js实现(控制鼠标指针位置/自动选择指定文本)
- 关于如何实现编辑框单击时自动选中全部内容的方法
- jQuery插件zTree实现单独选中根节点中第一个节点示例
- jQuery插件zTree实现清空选中第一个节点所有子节点的方法
- hive2hive mtods自动设置权限实现
- shell编程之sudo实现权限自动切换
- 在驱动模块初始化函数中实现设备节点的自动创建
- javascrip实现:若选中TreeView的父节点checkbox,则其子节点全部选中