Extjs中通過Tree加載右側TabPanel


最近在做一個物流管理的項目,公司必須要求用Extjs4.1來做界面,因為以前一直也沒有接觸過所以開發的過程中遇到了很多的困難。同時Extjs4.1的資料在網上也相對來說較少。好了,不說廢話上代碼:

1.左側的功能樹

 1 Ext.define("AM.view.SystemTree", {
 2     extend : 'Ext.tree.Panel',
 3     alias : 'widget.systemTree',
 4     rootVisible : false,// 不展示ROOT
 5     displayField : 'text',
 6     // title:'物流運輸系統',
 7     viewConfig : { // 具有拖拽功能
 8         plugins : {
 9             ptype : 'treeviewdragdrop'
10         },
11         listeners : { // 拖拽
12             drop : function(node, data, overModel, dropPosition, options) {
13                 alert("把: " + data.records[0].get('text') + " 移動到: "
14                         + overModel.get('text'));
15             }
16         }
17     },
18 
19     dockedItems : [ {
20         xtype : 'toolbar',
21         items : [ {
22             xtype : 'button',
23             id : 'allopen',
24             icon : 'resources/img/lock_open.png',
25             text : '展開全部'
26         }, {
27             xtype : 'button',
28             id : 'allclose',
29             icon : 'resources/img/lock.png',
30             text : '收起全部'
31         } ]
32     } ],
33 
34     root : {
35         text : 'root',
36         leaf : false,
37         id : '0',
38         children : [ {
39             text : '運輸管理',
40             checked : false, // 顯示被選中
41             leaf : false, // 是否是葉子節點
42             icon : 'resources/img/folder_user.png',
43             id : '01',
44             children : [ {
45                 text : '車輛信息管理',
46                 checked : false,
47                 icon : 'resources/img/report_edit.png',
48                 leaf : true,
49                 id : 'vehiclelist',  //主要的要點在這里,這里的id要指定為你要打開的那個視圖的別名 50             }]
51         }]
52     }
53 
54 });

要點介紹:

  • tree一定不要忘記添加別名alias
  • 設置樹形結構的子節點的id值為你需要在右側顯示的view的別名alias(重要) ------可參考下方的view代碼

2.需要打開的對應的view

 1 Ext.define("AM.view.transportation.VehicleList",{
 2     extend:'Ext.grid.Panel',
 3     alias:'widget.vehiclelist',   //這里一定要設置別名  4     id:'vehiclelist',
 5     store:'VehicleStore',
 6     ......中間代碼省略
 7     columns : [
 8                      {text:'車輛編號',dataIndex:'vehicleNo',
 9                          field:{
10                              xtype:'textfield',
11                              allowBlank:false
12                          }
13                      },
14 
15                      {text:'車輛描述',xtype:'templatecolumn',
16                          tpl:'車輛的編號為{vehicleNo} 所在地區為{vehicleArea}'    
17                      }
18                  ],
19     initComponent:function(){
20         this.callParent(arguments);
21     }
22 });

3.建立一個右側的TabPanel

 1     Ext.define('AM.view.TabPanel',{         //主頁面的tab面板
 2         extend: 'Ext.tab.Panel', 
 3         alias:'widget.tabpanel',
 4         closeAction: 'destroy',
 5         defaults :{
 6             bodyPadding: 10
 7         },
 8         items: [{
 9             title: '主頁',
10             autoLoad:'content.jsp'    //只有一個基本的panel
11         }],
12 
13     }); 

4.設置點擊tree的觸發事件

 1 'systemTree':{
 2                 itemclick:function(tree,record,item,index,e,options){
 3                     var tabs = tree.ownerCt.ownerCt.ownerCt
 4                     .child('#center-grid').child("#tabpanel");
 5                     //獲取當前點擊的節點  
 6                      var treeNode=record.raw;  
 7                      var id = treeNode.id;  
 8                      var text=treeNode.text;  
 9                      //獲取點擊的樹節點相同的tab標簽  
10                      var tab = tabs.getComponent(id); 
11                      if(!tab){//如果不存在  
12                         tabs.add({//用點擊樹的節點的ID、text新建一個tab  
13                          id:id,  
14                          closable: true,    
15                          title:text,    
16                          iconCls:id,    
17                          xtype:id  //將tree設置好的id對應的TabPanel中去,相當與把對應的view填充到TabPanel中 18                         }).show();
19                      }else{//如果存在  
20                         tabs.setActiveTab(tab);//Active  
21                      }  
22                 }
23             },

結果上效果圖:

總結:Extjs做出來的效果確實很炫,但是學起來也有一定的難度,特別是比較新的版本,網上很難找到什么好的教程。還好我們有API,可以多對着API中的例子進行練習,這樣掌握起來也很快。最近才接觸Extjs,希望各位大神不要吐槽!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM