Extjs中通過Tree加載右側(cè)TabPanel具體實現(xiàn)
更新時間:2013年05月05日 18:12:42 作者:
用Extjs4.1來做界面,有關(guān)Extjs4.1資料在網(wǎng)上也相對來說較少,下面是具體的實現(xiàn)代碼1.左側(cè)的功能樹2.需要打開的對應(yīng)的view,有類似需求的朋友可以參考下哈
最近在做一個物流管理的項目,公司必須要求用Extjs4.1來做界面,因為以前一直也沒有接觸過所以開發(fā)的過程中遇到了很多的困難。同時Extjs4.1的資料在網(wǎng)上也相對來說較少。好了,不說廢話上代碼:
1.左側(cè)的功能樹
Ext.define("AM.view.SystemTree", {
extend : 'Ext.tree.Panel',
alias : 'widget.systemTree',
rootVisible : false,// 不展示ROOT
displayField : 'text',
// title:'物流運輸系統(tǒng)',
viewConfig : { // 具有拖拽功能
plugins : {
ptype : 'treeviewdragdrop'
},
listeners : { // 拖拽
drop : function(node, data, overModel, dropPosition, options) {
alert("把: " + data.records[0].get('text') + " 移動到: "
+ overModel.get('text'));
}
}
},
dockedItems : [ {
xtype : 'toolbar',
items : [ {
xtype : 'button',
id : 'allopen',
icon : 'resources/img/lock_open.png',
text : '展開全部'
}, {
xtype : 'button',
id : 'allclose',
icon : 'resources/img/lock.png',
text : '收起全部'
} ]
} ],
root : {
text : 'root',
leaf : false,
id : '0',
children : [ {
text : '運輸管理',
checked : false, // 顯示被選中
leaf : false, // 是否是葉子節(jié)點
icon : 'resources/img/folder_user.png',
id : '01',
children : [ {
text : '車輛信息管理',
checked : false,
icon : 'resources/img/report_edit.png',
leaf : true,
id : 'vehiclelist', //主要的要點在這里,這里的id要指定為你要打開的那個視圖的別名
}]
}]
}
});
要點介紹:
•tree一定不要忘記添加別名alias
•設(shè)置樹形結(jié)構(gòu)的子節(jié)點的id值為你需要在右側(cè)顯示的view的別名alias(重要) ------可參考下方的view代碼
2.需要打開的對應(yīng)的view
Ext.define("AM.view.transportation.VehicleList",{
extend:'Ext.grid.Panel',
alias:'widget.vehiclelist', //這里一定要設(shè)置別名
id:'vehiclelist',
store:'VehicleStore',
......中間代碼省略
columns : [
{text:'車輛編號',dataIndex:'vehicleNo',
field:{
xtype:'textfield',
allowBlank:false
}
},
{text:'車輛描述',xtype:'templatecolumn',
tpl:'車輛的編號為{vehicleNo} 所在地區(qū)為{vehicleArea}'
}
],
initComponent:function(){
this.callParent(arguments);
}
});
3.建立一個右側(cè)的TabPanel
Ext.define('AM.view.TabPanel',{ //主頁面的tab面板
extend: 'Ext.tab.Panel',
alias:'widget.tabpanel',
closeAction: 'destroy',
defaults :{
bodyPadding: 10
},
items: [{
title: '主頁',
autoLoad:'content.jsp' //只有一個基本的panel
}],
});
4.設(shè)置點擊tree的觸發(fā)事件
'systemTree':{
itemclick:function(tree,record,item,index,e,options){
var tabs = tree.ownerCt.ownerCt.ownerCt
.child('#center-grid').child("#tabpanel");
//獲取當(dāng)前點擊的節(jié)點
var treeNode=record.raw;
var id = treeNode.id;
var text=treeNode.text;
//獲取點擊的樹節(jié)點相同的tab標(biāo)簽
var tab = tabs.getComponent(id);
if(!tab){//如果不存在
tabs.add({//用點擊樹的節(jié)點的ID、text新建一個tab
id:id,
closable: true,
title:text,
iconCls:id,
xtype:id //將tree設(shè)置好的id對應(yīng)的TabPanel中去,相當(dāng)與把對應(yīng)的view填充到TabPanel中
}).show();
}else{//如果存在
tabs.setActiveTab(tab);//Active
}
}
},
結(jié)果上效果圖:

總結(jié):Extjs做出來的效果確實很炫,但是學(xué)起來也有一定的難度,特別是比較新的版本,網(wǎng)上很難找到什么好的教程。還好我們有API,可以多對著API中的例子進行練習(xí),這樣掌握起來也很快。最近才接觸Extjs,希望各位大神不要吐槽!
1.左側(cè)的功能樹
復(fù)制代碼 代碼如下:
Ext.define("AM.view.SystemTree", {
extend : 'Ext.tree.Panel',
alias : 'widget.systemTree',
rootVisible : false,// 不展示ROOT
displayField : 'text',
// title:'物流運輸系統(tǒng)',
viewConfig : { // 具有拖拽功能
plugins : {
ptype : 'treeviewdragdrop'
},
listeners : { // 拖拽
drop : function(node, data, overModel, dropPosition, options) {
alert("把: " + data.records[0].get('text') + " 移動到: "
+ overModel.get('text'));
}
}
},
dockedItems : [ {
xtype : 'toolbar',
items : [ {
xtype : 'button',
id : 'allopen',
icon : 'resources/img/lock_open.png',
text : '展開全部'
}, {
xtype : 'button',
id : 'allclose',
icon : 'resources/img/lock.png',
text : '收起全部'
} ]
} ],
root : {
text : 'root',
leaf : false,
id : '0',
children : [ {
text : '運輸管理',
checked : false, // 顯示被選中
leaf : false, // 是否是葉子節(jié)點
icon : 'resources/img/folder_user.png',
id : '01',
children : [ {
text : '車輛信息管理',
checked : false,
icon : 'resources/img/report_edit.png',
leaf : true,
id : 'vehiclelist', //主要的要點在這里,這里的id要指定為你要打開的那個視圖的別名
}]
}]
}
});
要點介紹:
•tree一定不要忘記添加別名alias
•設(shè)置樹形結(jié)構(gòu)的子節(jié)點的id值為你需要在右側(cè)顯示的view的別名alias(重要) ------可參考下方的view代碼
2.需要打開的對應(yīng)的view
復(fù)制代碼 代碼如下:
Ext.define("AM.view.transportation.VehicleList",{
extend:'Ext.grid.Panel',
alias:'widget.vehiclelist', //這里一定要設(shè)置別名
id:'vehiclelist',
store:'VehicleStore',
......中間代碼省略
columns : [
{text:'車輛編號',dataIndex:'vehicleNo',
field:{
xtype:'textfield',
allowBlank:false
}
},
{text:'車輛描述',xtype:'templatecolumn',
tpl:'車輛的編號為{vehicleNo} 所在地區(qū)為{vehicleArea}'
}
],
initComponent:function(){
this.callParent(arguments);
}
});
3.建立一個右側(cè)的TabPanel
復(fù)制代碼 代碼如下:
Ext.define('AM.view.TabPanel',{ //主頁面的tab面板
extend: 'Ext.tab.Panel',
alias:'widget.tabpanel',
closeAction: 'destroy',
defaults :{
bodyPadding: 10
},
items: [{
title: '主頁',
autoLoad:'content.jsp' //只有一個基本的panel
}],
});
4.設(shè)置點擊tree的觸發(fā)事件
復(fù)制代碼 代碼如下:
'systemTree':{
itemclick:function(tree,record,item,index,e,options){
var tabs = tree.ownerCt.ownerCt.ownerCt
.child('#center-grid').child("#tabpanel");
//獲取當(dāng)前點擊的節(jié)點
var treeNode=record.raw;
var id = treeNode.id;
var text=treeNode.text;
//獲取點擊的樹節(jié)點相同的tab標(biāo)簽
var tab = tabs.getComponent(id);
if(!tab){//如果不存在
tabs.add({//用點擊樹的節(jié)點的ID、text新建一個tab
id:id,
closable: true,
title:text,
iconCls:id,
xtype:id //將tree設(shè)置好的id對應(yīng)的TabPanel中去,相當(dāng)與把對應(yīng)的view填充到TabPanel中
}).show();
}else{//如果存在
tabs.setActiveTab(tab);//Active
}
}
},
結(jié)果上效果圖:

總結(jié):Extjs做出來的效果確實很炫,但是學(xué)起來也有一定的難度,特別是比較新的版本,網(wǎng)上很難找到什么好的教程。還好我們有API,可以多對著API中的例子進行練習(xí),這樣掌握起來也很快。最近才接觸Extjs,希望各位大神不要吐槽!
相關(guān)文章
Extjs3.0 checkboxGroup 動態(tài)添加item實現(xiàn)思路
Extjs3.0中的CheckboxGroup默認(rèn)不能動態(tài)添加item,如需要數(shù)據(jù)動態(tài)創(chuàng)建,試著創(chuàng)建整個CheckboxGroup,而不是動態(tài)添加item,具體實現(xiàn)如下,感興趣的朋友可以了解下2013-08-08
關(guān)于extjs treepanel復(fù)選框選中父節(jié)點與子節(jié)點的問題
實現(xiàn)帶有復(fù)選框的樹,選中父節(jié)點時,選中所有子節(jié)點。取消所有子節(jié)點時,才能取消根節(jié)點,感興趣的朋友可以了解下本文2013-04-04
關(guān)于extjs4如何獲取grid修改后的數(shù)據(jù)的問題
如何獲取grid修改后的數(shù)據(jù)問題,下面是API的描述。可以獲取各種值,感興趣的朋友可以參考下2013-08-08
extjs 列表框(multiselect)的動態(tài)添加列表項的方法
最近公司一個項目,因為要使用div模擬的窗口,因為久聞extjs的大名,因此就想在項目中使用一下.首先下載了multiselect的extjs3.0 demo.看到的代碼這里我就不粘貼了.2009-07-07
extjs grid設(shè)置某列背景顏色和字體顏色的實現(xiàn)方法
extjs grid設(shè)置某列背景顏色和字體顏色的實現(xiàn)步驟,需要的朋友可以參考下。2010-09-09

