Ext中TREE的扩展 ,三种状态

最近在一个项目中用到了EXT中TREE,但是它本身不提供自己想要的功能,在一番搜索之后,找到了《 Ext.tree.TreeNodeUI 进行checkbox功能的扩展》这个文章,在看过以后,发现了几个问题

1、只有两种状态

2、当选中子节点的时候,它又把自己的父节点给循环了一边

于是自己就做了如下修改,这里只贴修改后的,如果有人想比较,可以找找那篇文章

// private
childCheck : function(node,checked){
var a = node.attributes;
if(!a.leaf) {
// debugger;
var cs = node.childNodes;
var csui;
for(var i = 0; i < cs.length; i++) {
csui = cs[i].getUI();
csui.checkbox.checked=checked;
this.childCheck(cs[i],checked);
}
}
},

// private
parentCheck : function(node ,checked){
var checkbox = node.getUI().checkbox;
if(typeof checkbox == 'undefined')return ;
//debugger;
var state=this.childHasChecked(node,checked);

//if(!(checked ^ checkbox.checked))return;
//if(!checked && childhaschecked) return;
if (state==0)//全否
{
checkbox.checked=false;
checkbox.indeterminate=false;
} else
if (state==1) //半选中
{
checkbox.checked=true;
checkbox.indeterminate=true;
} else
{
checkbox.checked=true;
checkbox.indeterminate=false;
}
// checkbox.checked = checked;
node.attributes.checked = checkbox.checked;
node.getOwnerTree().fireEvent('check', node, checked);

var parentNode = node.parentNode;
if( parentNode !== null){
this.parentCheck(parentNode,checked);
}
},

// private
childHasChecked : function(node,checked){//检查是否存在被勾选的 并且状态不为灰化的
var childNodes = node.childNodes;
var retValue=0;
if(childNodes || childNodes.length>0){
for(var i=0;i<childNodes.length;i++){
var checkbox=childNodes[i].getUI().checkbox;
//本身是全选中状态 即 checked=true, indeterminate=false , 并且此次进来取消选中状态(参数checked=false) 则只需要找出子节点是否存在被选中 如果存在某个子节点为半选中状态,则为半选中,否则不选中
if(!checked) {
if (checkbox.checked ) //存在选中 则直接退出
{
return 1;//半选中状态
}
} else {
retValue=2;
if (!checkbox.checked || (checkbox.checked && checkbox.indeterminate))
{
return 1;
}
}

}
}
return retValue;
},




本文来自CSDN博客:http://blog.csdn.net/taogou/archive/2009/03/17/3999115.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值