Extjs tree 实现父节点和子节点联动
来源:互联网 发布:锁屏后仍能录像的软件 编辑:程序博客网 时间:2024/04/30 08:15
ee = Ext.extend(Ext.tree.TreePanel, {
constructor : function(config) {
console.debug('Tree config roleId=' + config.roleId);
Eway.relation.Role2Permission.Tree.superclass.constructor.call(this, Ext.apply({
height: 450,
width: 300,
useArrows:true,
autoScroll:true,
animate:true,
enableDD:false,
containerScroll: true,
/*plugins: [new Ext.plugin.tree.TreeNodeChecked({
// 级联选中
cascadeCheck: true,
// 级联父节点
cascadeParent: true,
// 级联子节点
cascadeChild: true ,
// 连续选中
linkedCheck: false,
// 异步加载时,级联选中下级子节点
asyncCheck: false,
// 显示所有树节点checkbox
displayAllCheckbox: false
})] ,*/
// loader : new Ext.tree.TreeLoader({
// }),
root : new Ext.tree.AsyncTreeNode({
id : 'root',
text : '安全内控系统',
expanded : true
}),
loader : new Ext.tree.TreeLoader({
requestMethod : 'GET',
dataUrl : Eway.REST_URL+"/relation/role2permission/tree",
baseParams : {
roleId : config.roleId
}
}),
listeners: {
'checkchange': function(node, checked){
var INDEX_CATEGORY_CHECKING = false;
node.expand();
node.attributes.checked = checked;
if(checked) {
this.link(this.roleId, node.attributes.id);
}
else {
this.unlink(this.roleId, node.attributes.id);
};
var parentNode = node.parentNode;
if(parentNode !== null) {
this.parentCheck(parentNode,checked);
}
node.expand();
node.attributes.checked = checked;
node.eachChild(function(child){
child.ui.toggleCheck(checked);
child.attributes.checked = checked;
if(!child.isLeaf()){
child.fireEvent('checkchange', child, checked);
}
});
// this.childChecked(node,checked);
/*if (!INDEX_CATEGORY_CHECKING) {
INDEX_CATEGORY_CHECKING = true;
this.checkchild(node,checked);
this.checkparent(node);
INDEX_CATEGORY_CHECKING=false;
}*/
}
}
}, config));
},
childHasChecked :function(node){
var childNodes = node.childNodes;
if(childNodes || childNodes.length>0){
for(var i=0;i<childNodes.length;i++){
if(childNodes[i].getUI().checkbox.checked)
return true;
}
}
return false;
},
parentCheck:function(node,checked){
var checkbox = node.getUI().checkbox;
if(typeof checkbox == 'undefined')
return false;
if(!(checked ^ checkbox.checked))
return false;
if(!checked && this.childHasChecked(node))
return false;
checkbox.checked = checked;
node.attributes.checked = checked;
node.getUI().checkbox.indeterminate = checked; //半选中状态
node.getOwnerTree().fireEvent('check', node, checked);
var parentNode = node.parentNode;
if( parentNode !== null){
this.parentCheck(parentNode,checked);
}
},
checkchild:function(node,checked){
node.eachChild(function(child){
//debugger;
child.ui.toggleCheck(checked);
child.attributes.checked = checked;
if(!child.isLeaf()){
this.checkchild(child,checked);//递归
}else{
return;
}
//child.on('checkchange',function(node, checked){return false});
//child.fireEvent('checkchange', child, checked);
});
},
checkparent:function(node){
if(!node){return false;}
var parentNode = node.parentNode;
if(parentNode !== null) {
var isall=true;
parentNode.eachChild(function(n){
if(!n.attributes.checked){
isall=false;
}
});
if(isall){
parentNode.ui.toggleCheck(isall);
parentNode.attributes.checked = isall;
}else{
parentNode.ui.toggleCheck(isall);
parentNode.attributes.checked = isall;
}
}else{
return ;
}
this.checkparent(parentNode);//递归
},
childChecked:function(node,checked){
var INDEX_CATEGORY_CHECKING;
if (!INDEX_CATEGORY_CHECKING) {
INDEX_CATEGORY_CHECKING = true;
// true时,子同父,父也同子
if (checked == true) {
node.attributes.checked = true;
// 父变为true,所有子都跟着变化
(function(node) {
var _this = arguments.callee;
if (!node.isLeaf()) {
node.expand();
node.eachChild(function(child) {
child.ui.toggleCheck(true);
child.attributes.checked = true;
_this.call(_this, child);
});
}else{
return;
}
})(node);
// 父变为true,父的父(如果有的话)也应该都为true
(function(node) {
var _this = arguments.callee;
if (node.parentNode && node.parentNode != this.root) {
var pnode = node.parentNode;
pnode.ui.toggleCheck(true);
pnode.attributes.checked = true;
_this.call(_this, pnode);
}else{
return;
}
})(node);
}else { // false 时,子同父,但父不一定同子
node.attributes.checked = false;
// 父变为false,所有子跟着变化
(function(node) {
var _this = arguments.callee;
if (!node.isLeaf()) {
node.expand();
node.eachChild(function(child) {
child.ui.toggleCheck(false);
child.attributes.checked = false;
_this.call(_this, child);
});
}else{
return;
}
})(node);
// 父变为false,但父的父(如果有的话)不一定变化
(function(node) {
var _this = arguments.callee;
if (node.parentNode && node.parentNode != this.root) {
var pnode = node.parentNode;
var chk = false;
pnode.eachChild(function(child) {
if (child.attributes.checked == true) {
chk = true;
return false;
}
});
if (chk == true) {
return;
} else {
pnode.ui.toggleCheck(false);
pnode.attributes.checked = false;
_this.call(_this, pnode);
}
}else{
return;
}
})(node);
}
INDEX_CATEGORY_CHECKING = false;
}
},
link : function(roleId, permissionCode) {
Ext.Ajax.request({
url : Eway.REST_URL+"/relation/role2permission/link",
method : 'POST',
params : {
roleId : roleId,
permissionCode : permissionCode
}
});
},
unlink : function(roleId, permissionCode) {
Ext.Ajax.request({
url : Eway.REST_URL+"/relation/role2permission/unlink",
method : 'POST',
params : {
roleId : roleId,
permissionCode : permissionCode
}
});
}
});
Ext.reg('relation.Role2Permission.tree', Eway.relation.Role2Permission.Tree);
- Extjs tree 实现父节点和子节点联动
- Extjs选中当前节点后自动选中子节点和父节点
- extjs tree 展开节点
- extjs tree 展开节点
- CTreeCtrl带CHECKBOX属性,实现联动效果(点击父节点全部子节点被选中)
- ExtJs tree 中 之前插入节点和之后插入节点
- Extjs TreePanel选中子节点默认选中父节点,取消勾选父节点子节点默认取消
- ExtJs复选框树,可实现节点选中自动选中父节点子节点(权限树)
- ExtJs复选框树,可实现节点选中自动选中父节点子节点(权限树)
- extjs 遍历树 根据子节点修改父节点图标
- EasyUI tree 选中父节点子节点全部选中,选中子节点父节点不选中
- HTML中父节点和子节点
- 如何查询子节点和父节点
- 实现单击tree的子节点得到其所有父节点的id呢
- JavaScript Tree 功能强大,包含checkbox,自动选择子节点和父节点.
- Tree 功能强大,包含checkbox,自动选择子节点和父节点.
- Extjs4中tree组件子节点和父节点的级联操作
- Extjs4中tree组件查找所有父节点和查找所有子节点的递归方法
- 2011/1/11
- AttributeError: type object '_socketobject' has no attribute 'socket'
- mysqldump 导出数据或表结构(远程&本地)
- tomcat 清除缓存
- JSP+Tomcat连接Oracle数据库
- Extjs tree 实现父节点和子节点联动
- 交换两个变量而不用临时变量
- 利用SPAM打ABAP补丁
- Linux高负载下优化MYSQL
- 八款开源Android游戏引擎
- In java, range of byte : -128 ----- 127(for SCJP)
- VS2008 下安装 AjaxControlToolkit
- js jQuery mobile
- 量子基金