2010-04-14 1 views
0

json과 내선 treepanel을 가지고 있습니다.getNodeById가 작동하지 않습니다.

var tree = new Ext.tree.TreePanel({ 
renderTo:'tree-container', 
title: 'Category', 
height: 300, 
width: 400, 
useArrows:true, 
autoScroll:true, 
animate:true, 
enableDD:true, 
containerScroll: true, 
rootVisible: false, 
frame: true, 
root: { 
    text: 'Category', 
    draggable: false, 
    id: '0' 
}, 

// auto create TreeLoader 
dataUrl: $("#web").val() + "/category/index/get-nodes", 

listeners: { 
    'checkchange': function(node, checked){ 
     if(checked){ 
       categoryManager.add(node.id); 
      //node.getUI().addClass('complete'); 
     }else{ 
       categoryManager.remove(node.id); 
      // node.getUI().removeClass('complete'); 
     } 
    } 
} 

});

dataUrl 다음 JSON 코드

[{"text":"Code Snippet","id":"1","cls":"folder","checked":false,"children":[{"text":"PHP","id":"3","cls":"file","checked":false,"children":[]},{"text":"Javascript","id":"4","cls":"file","checked":false,"children":[]}]}] 

내가 CONSOLE.LOG하여 노드를 찾으려고로드 (tree.getNodeByid (3)), 그것은 정의되지 않은 것을 알 수있다.

내 코드에 문제가 있습니까?

답변

2

tree.getNodeById (...) 당신은 다음과 같은 노드 경로를 찾아보다 경로를 확장하여 노드를 얻을 수 있습니다

을 확대에만 노드를 찾을 수

var MyTree = Ext.extend(Ext.tree.TreePanel, { 
getPath : function(id){ 
     var node = this.getNodeById(id); 
     if(node){ 
      return node.getPath(); 
     } 
     var paths = this.root.getPath(); 
     forEach = function(list, fun, sope){ 
      if(!list || list.length == 0){ 
       return; 
      } 
      for(var i = 0, length = list.length; i < length; i++){ 
       var node = list[i]; 
       var args = []; 
       args.push(node); 
       if(arguments.length > 3){ 
        for(var ii = 3; ii < arguments.length; ii++){ 
         args.push(arguments[ii]); 
        } 
       } 
       var result = fun.apply(sope, args); 
       if(result){ 
        return result; 
       } 
      } 
     }; 

     getChildNodes = function(parent){ 
      var children = parent.children || parent.childNodes; 
      if(children && children.length == 0 && parent.attributes){ 
       children = parent.attributes.children; 
      } 
      return children; 
     }; 

     getPath = function(item, paths){ 
      if(item.id == id){ 
       return paths + "/" + item.id; 
      } 
      return forEach(getChildNodes(item), getPath, this, paths + "/" + item.id); 
     }; 
     return forEach(getChildNodes(this.root), getPath, this, paths); 
    } 
}); 

var tree = new MyTree(....); 
var paths = tree.getPath(id); 
if(paths){ 
    this.expandPath(paths); 
    var node = tree.getNodeById(id); 
} 
관련 문제