2014-12-02 277 views
0

我有一个组织结构图,有很多层次,下面的图片是从它的一部分中提取的。 我尝试获取选定节点的所有孩子和子孩子,就像“Power Business Unit”节点选择它获得所有3个孩子并且每个孩子都这样做一样。我得到了第一级,但我无法得到树的深度,以提供达到最后一个孩子的循环次数。谷歌可视化组织结构图(节点儿童)

1-我怎样才能得到图表中的最后一个孩子?如何获得树的深度?

2-是否有放大/缩小工具栏或某些东西,我可以添加到图表中?

就是我的画的代码:

google.load('visualization', '1', { packages: ['table', 'orgchart'] }); 
    google.setOnLoadCallback(drawChart); 
    function drawChart() { 

     var data = new google.visualization.DataTable(); 
     data.addColumn('string', 'NODE'); 
     data.addColumn('string', 'PARENT'); 
     data.addColumn('string', 'NODEID'); 

     data.addRows(JSON.parse(document.getElementById("<%=HiddenField1.ClientID%>").value)); 
     // 
     var chart = new google.visualization.OrgChart(document.getElementById('chart_div')); 

     function selectHandler() { 
      var selectedItem = chart.getSelection()[0]; 
      if (selectedItem) { 
       var oInd = data.getValue(selectedItem.row, 2); 

       var arrLoop = chart.getChildrenIndexes(selectedItem.row); 
       var arrConcat = chart.getChildrenIndexes(selectedItem.row); 


       for (var i = 0; i < arrLoop.length; i++) { 
        var arr2 = new Array(chart.getChildrenIndexes(arrLoop[i]).length); 
        arr2 = chart.getChildrenIndexes(arrLoop[i]); 
        for (var j = 0; j < arr2.length; j++) { 
         arrConcat.push(arr2[j]); 
        } 
        arrConcat.concat(arr2); 
       } 

       var arrChilds = new Array(arrConcat.length); 

       for (var i = 0; i < arrConcat.length; i++) { 
        arrChilds[i] = data.getValue(arrConcat[i], 2); 
       } 
       drawTable(oInd, arrChilds); 
      } 
     } 

     google.visualization.events.addListener(chart, 'select', selectHandler); 

     chart.draw(data, { allowHtml: true }); 

     //for (var i = 0; i < data.getNumberOfRows() ; i++) { 
     // chart.collapse(i, true); 
     //} 
    } 

Google Organizational Chart

回答

1

不知道你的图表中的最后一个孩子的意思。而且这个图表似乎不支持缩放,你可能必须自己编码或查看库。关于你提到的让孩子们和选择subchildren的问题,你需要处理递归:

google.visualization.events.addListener(chart, 'select', function(){ 
      var children=[] 
      var selected=chart.getSelection()[0].row; 

      function getChilds(index){ // recursive function, adds children of index (row) 
       var childs=chart.getChildrenIndexes(index); // get children indexes of current index 
       for(var i = 0; i < childs.length;i++){ // for each children 
        children.push(data.getValue(childs[i],0)) // add the title 
        getChilds(childs[i]) // and call the function with this children index, to get their children and so on >> this is recursive 
       } 
      } 

      getChilds(selected) // start recursive function with selected index 
      console.log(children) 

     }) 

下面是一个例子:http://jsfiddle.net/36gg3ro1/1/

+0

感谢的人,我不知道为什么我没有想到递归之前。 – 2014-12-03 08:13:48

+0

没问题,与proyect祝你好运 – juvian 2014-12-03 17:06:57