当前位置: 代码迷 >> Web前端 >> Ext中TREE的扩充 ,三种状态
  详细解决方案

Ext中TREE的扩充 ,三种状态

热度:66   发布时间:2012-10-27 10:42:26.0
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
1 楼 lanwuying 2012-04-25  
这个也是有问题的哦
都不支持级联全选
就是点父节点的复选框 子节点不能选中
  相关解决方案