// 定義搜索節點樹結構Store
const nodeStore = Ext.create('Ext.data.TreeStore',
 {
   autoLoad : true,
   id : 'nodeStoreTreeId',
   fields : ['index', 'nodeId', 'name_or_index', 'to_node', 'type'],
   proxy : {
     type : 'memory',
     reader : {
       type : 'json',
     }
   },
   root : {
     text : '根節點',
     expanded : true
   },
   folderSort : true,
 });
// 搜索子節點展示樹結構面板
const nodeTreePanel = Ext.create('Ext.tree.TreePanel',{
  title : '子節點樹結構圖',
   id : `${data.title}NodeTreeId`,
   width : '45%',
   height : 400,
   region : 'east',
   collapsed : false,
   collapsible : false,
   closeAction : 'hide',
   useArrows : true,
   rootVisible : false,
   autoScroll : true,
   autoShow : true,
   animate : true,
   store : nodeStore,
listeners : { // 主要就是這個監聽事件
// 展開之后觸發 afteritemexpand
    'afteritemexpand' : function(itme, index)
     {
// 准備的參數或者其他數據,我這邊需要一個nodeId
const nodeId = itme.data.nodeId;
// 通過這個nodeId獲得當前節點下的子節點數據。
const Result = heapNodeSerialize(jsHeapSnapShot[data.title], nodeId);
      // 處理添加新的子節點
       for (let i = 0; i < itme.parentNode.childNodes.length; i++)
       {
         const everyChildNode = itme.parentNode.childNodes[i];
         const everyChildNodeId = everyChildNode.data.nodeId;
         if (everyChildNodeId == nodeId)
         {
           // 首次展開需要添加子節點。
           for (let j = 0; j < everyChildNode.parentNode.childNodes.length; j++)
           {
             const everyGrandsonNode = everyChildNode.parentNode.childNodes[j];
             // 已經加載過子節點的值,后面再次展開無需再加載。
             if ((everyGrandsonNode.data.nodeId == nodeId) && everyGrandsonNode.childNodes.length == 0)
             {
               // 將葉子節點數據設置到子節點里面。
              // 前面都是數據處理,這個才是向子節點添加子節點的地方。
               everyChildNode.appendChild(Result);
             }
           }
         }
       } 
}
}
});
// 效果圖

圖·1
// 期間遇到的問題
1、之前將使用的是itemclick事件,后來換成了 afteritemexpand 點擊展開后觸發事件,監聽itemclick事件
存在使用不怎么友好的問題。
2、當遇到子節點被重復展開觸發事件,會出現前面其他子節點同樣的子節點和現在的子節點一樣的節點
數據會出現亂竄問題。(這里可能有點繞-看下圖·2):決解方案:在已經展開的節點上面做記錄,如果
重復展開並且后面的數據是一樣的,可直接return。這樣避免了數據亂竄的問題。

圖·2
