最近在做一個物流管理的項目,公司必須要求用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,希望各位大神不要吐槽!