ExtJS 3.4.0 - Use TreePanel beforeload event to load children

在這邊要探討的是,假設我們要呈現一樹狀圖的功能清單,是否可以在一開始初始化時不用

先載入該目錄的Children,而當我們點擊目錄時才去做post action,進而在後端回傳相關的

JSON CODE。此時會想要了解,當下的JSON CODE要怎麼組織? 而當前端已呈列該Children

時,重新點選該目錄是否還會重復做post action的動作?

在這邊將舉個簡單的例子

一開始先載入兩個目錄型別的node,分別為test1, test2


相關code如下

  1. var tree = new Ext.tree.TreePanel({
  2. renderTo:'tree-div',
  3. title: '我擅長的技能',
  4. height: 300,
  5. width: 400,
  6. enableDD:true,
  7. containerScroll: true,
  8. rootVisible: false,
  9. //useArrows: true,
  10. autoScroll: true,
  11. animate: true,
  12. border: false,
  13. //checkModel: 'multiple',
  14. root: {
  15. nodeType: 'async',
  16. draggable: false
  17. },
  18. // auto create TreeLoader
  19. dataUrl: '/CheckTree/loadTree'
  20. });
  21. tree.on({
  22. 'beforeexpandnode':{
  23. fn: function(node, deep, ami){
  24. var n = node.attributes;
  25. alert(n.text);
  26. //tree.loader.dataUrl = '/CheckTree/loadTree?node111='+n.text;
  27. //tree.reload();
  28. },
  29. scope: this
  30. },
  31. 'beforeload':{
  32. fn: function(node){
  33. var n = node.attributes;
  34. tree.loader.dataUrl = '/CheckTree/loadTree?node111='+n.text;
  35. }
  36. }
  37. });
  38. tree.getRootNode().expand();

後端部分

在這邊是利用Java 組JSON格式的hard code,因此就不另外show出程式碼了


從一開始initialize時,可以看出test1的子項目已經建立,因此當點擊test1時,不會做POST

而test2是沒有子項目建立的


當點擊test2後,ExtJS元件就會自動做POST動作,此時後端會輸出相關JSON CODE為OOXX

 NODE



beforeload event的行為,'/CheckTree/loadTree?node111='+n.text; 語法n.text會傳該node name,

此時servlet那依據當下的node name來決定要回傳哪種格式的JSON CODE.

因此,當您點擊test2時,所產生的JSON CODE只需要是它所屬的

[{"text":"OOXX","cls":"file","leaf":"true"}]

留言