上半年做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;
  25. }