extjs关于treePanel+chekBox全部选中以及清空选中问题探讨

复制代码 代码如下:

  //树

  var treePanel = new Ext.tree.TreePanel({

  id:'ptree',

  region:'west',

  layout:'anchor',

  border:false,

  rootVisible: false,

  root:{},

  listeners:{

  render: function() {

  authorityTree(treePanel); /*渲染树*/

  },

  checkchange: function(node, state) {

  if (node.parentNode != null) {

  //选中子节点让相应的父节点选中

  var pNode = node.parentNode;

  if (state || treePanel.getChecked(id, pNode) == "") {

  pNode.ui.toggleCheck(state);// 触发父节点被选中

  pNode.attributes.checked = state;

  }

  }

  treeId = node.attributes.id;

  treeName = node.attributes.text;

  }

  }

  });

  //操作按钮

  tbar: [{

  id: 'btnQingKong',

  text: '清空',

  iconCls: 'winupdate-icon',

  handler: function() {

  var nodes = Ext.getCmp('ptree').getChecked();

  if (nodes && nodes.length) {

  for (var i = 0; i < nodes.length; i++) {

  //设置UI状态为未选中状态

  nodes[i].getUI().toggleCheck(false);

  //设置节点属性为未选中状态

  nodes[i].attributes.checked = false;

  }

  }

  }

  },{

  id: 'btnQuanXuan',

  text: '全选',

  iconCls: 'winupdate-icon',

  handler: function() {

  var nodeT = Ext.getCmp('ptree').getRootNode();

  treeCheckTrue(nodeT);

  }

  }]

  /**

  *checkTree全选

  */

  var treeCheckTrue = function(node)

  {

  node.eachChild(function (child) {

  child.getUI().toggleCheck(true);

  child.attributes.checked = true;

  treeCheckTrue(child);

  });

  }

  /**

  *checkTree清空

  */

  var treeCheckfalse = function(tree)

  {

  var nodes = tree.getChecked();

  if(nodes && nodes.length){

  for(var i=0;i<nodes.length;i++){

  //设置UI状态为未选中状态

  nodes[i].getUI().toggleCheck(false);

  //设置节点属性为未选中状态

  nodes[i].attributes.checked=false;

  }

  }

  }