上半年做ExtJS 4.x 的时候,遇到过对资源树操作的情况:

    
    
    
    
  1. Ext.tree.Panel  

如下图:



目的:
直接根据每个节点的{任意key : 对应value},就能找到匹配的节点对象
 

代码如下:

   
   
   
   
  1. refs : [ { 
  2.         selector : 'rtree'// 'rtree' 为资源树的 alias 名称
  3.         ref : 'treePanel' 
  4.     }]
   
   
   
   
  1. /** 
  2.  * 遍历资源树,然后取得该节点  
  3.  * key: 属性名称,  
  4.  * val : 属性值,  
  5.  * [root](可选): 遍历的起始节点, 默认为树根节点; 
  6.  */ 
  7.  getSubNode : function(key, val, root) { 
  8.     var me = this, tree, childs, i, node, _node; 
  9.     if (!root) { //如果参数root未传值,则默认从根节点开始遍历
  10.         tree = me.getTreePanel(); //得到
  11.         root = tree.store.getRootNode(); 
  12.     } 
  13.     childs = root.childNodes; 
  14.     i = 0; 
  15.     do { 
  16.         _node = childs[i]; 
  17.         if (_node.data[key] == val) 
  18.             return __node; 
  19.         if (_node.childNodes.length) { 
  20.             if (node = me.getSubNode(key, val, _node)) 
  21.                 return node; // 层层递归, 最后返回得到的节点
  22.         } 
  23.     } while (++i < childs.length); 
  24.     return null