Extjs中通过Tree加载右侧TabPanel具体实现_extjs

最近在做一个物流管理的项目,公司必须要求用Extjs4.1来做界面,因为以前一直也没有接触过所以开发的过程中遇到了很多的困难。同时Extjs4.1的资料在网上也相对来说较少。好了,不说废话上代码:
1.左侧的功能树

复制代码 代码如下:

Ext.define("AM.view.SystemTree", {
extend : 'Ext.tree.Panel',
alias : 'widget.systemTree',
rootVisible : false,// 不展示ROOT
displayField : 'text',
// title:'物流运输系统',
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, // 是否是叶子节点
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
•设置树形结构的子节点的id值为你需要在右侧显示的view的别名alias(重要) ------可参考下方的view代码
2.需要打开的对应的view

复制代码 代码如下:

Ext.define("AM.view.transportation.VehicleList",{
extend:'Ext.grid.Panel',
alias:'widget.vehiclelist',   //这里一定要设置别名
id:'vehiclelist',
store:'VehicleStore',
    ......中间代码省略
columns : [
{text:'车辆编号',dataIndex:'vehicleNo',
field:{
xtype:'textfield',
allowBlank:false
}
},
{text:'车辆描述',xtype:'templatecolumn',
tpl:'车辆的编号为{vehicleNo} 所在地区为{vehicleArea}'
}
],
initComponent:function(){
this.callParent(arguments);
}
});

3.建立一个右侧的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.设置点击tree的触发事件

复制代码 代码如下:

'systemTree':{
itemclick:function(tree,record,item,index,e,options){
var tabs = tree.ownerCt.ownerCt.ownerCt
.child('#center-grid').child("#tabpanel");
//获取当前点击的节点
var treeNode=record.raw;
var id = treeNode.id;
var text=treeNode.text;
//获取点击的树节点相同的tab标签
var tab = tabs.getComponent(id);
if(!tab){//如果不存在
tabs.add({//用点击树的节点的ID、text新建一个tab
id:id,
closable: true,
title:text,
iconCls:id,
xtype:id  //将tree设置好的id对应的TabPanel中去,相当与把对应的view填充到TabPanel中
}).show();
}else{//如果存在
tabs.setActiveTab(tab);//Active
}
}
},

结果上效果图:

总结:Extjs做出来的效果确实很炫,但是学起来也有一定的难度,特别是比较新的版本,网上很难找到什么好的教程。还好我们有API,可以多对着API中的例子进行练习,这样掌握起来也很快。最近才接触Extjs,希望各位大神不要吐槽!

时间: 2024-10-30 08:52:34

Extjs中通过Tree加载右侧TabPanel具体实现_extjs的相关文章

extjs-关于Extjs中使用loadRecord加载选择行至form表单中

问题描述 关于Extjs中使用loadRecord加载选择行至form表单中 handler:function(btn){ var win = new Ext.create(""Ext.window.Window"" { title: ""用户详细信息"" modal:true width: 600 height: 400 items: { xtype: ""form"" margin:

如何解决estjs中异步数据加载失败问题(加载数据超时导致数据加载失败),或延长extjs异步数据加载时间?

问题描述 如何解决estjs中异步数据加载失败问题(加载数据超时导致数据加载失败),或延长extjs异步数据加载时间? 问题补充:lizhi92574 写道 解决方案 Ext.data.Connection.prototype.timeout='9000';设置ajax请求时间默认30秒解决方案二:对解决方案三:你加载多大的数据居然超时了?

IE11或IE10中的管理加载项按钮是灰色的无法点击怎么办

  有时候我们在使用IE11或者是IE10会遇到IE游览器卡死或者是崩溃的情况,一般我们是时候Internet选项中的"管理加载项"来排除时候问题是否是加载项引起的.可当我们要进入管理加载项的时候,可能会发现"管理加载项"按钮是灰色的,而且无法点击.就如下图这样,怎么样能解决这个问题呢?下面就看小编教大家如何解决: 1.使用win+r组合键打开"运行",在里面输入"regedit"并回车,打开注册表编辑器; 2.然后依次打开下

解决tableView中cell动态加载控件的重用问题

解决tableView中cell动态加载控件的重用问题 tableView的cell,有时候需要在运行时取得对应的数据后才能够动态的创建该cell中的控件并加载到该cell中,此时,你一定会遇到重用问题,即使你能做到该cell只根据数值加载了一回控件,你也没法保证不出现重用问题:) 效果(请注意查看,移动下面的格子时,上面出现了重用的问题) 源码: YXCell.h // // YXCell.h // YXTableView // // Copyright (c) 2014年 Y.X. All

Hibernate中双向关联加载排序的解决方案

问题:Hibernate的<many-to-many>双向关联中,一方加载另一方时,怎么样达到按自定义规则排序的目的呢? 实例:角色和菜单是多对多的关系,为角色分配菜单后,加载菜单时,我需要按照菜单的ID来排序显示. 解决办法: 1. 通过在hbm配置文件中配置解决,需要自定义比较器. 1) 在多对多的主控端指定sort属性 这里的主控端为role,受控端为menu. role的配置为: <set name="roleMenus" table="ROLE_M

Excel中如何保存“加载宏”动画教程

<Excel2003入门动画教程55.Excel中如何保存"加载宏">. 演示动画 操作步骤 如果想把一个编辑了宏或自定义函数的工作簿移植到其他电脑上使用,在Excel中最科学的方法是保存为加载宏,方法如下. 工作簿文档编辑完成后,单击"保存"按钮,打开"另存为"对话框,将"保存类型"设置为"Microsoft Office Excel加载宏(*.xla)",然后取名保存. 提示 进入"

eigniter中实现一次性加载多个view的方法

 这篇文章主要介绍了codeigniter中实现一次性加载多个view的方法,实例分析了codeigniter中view方法的实用技巧,需要的朋友可以参考下     本文实例讲述了codeigniter中实现一次性加载多个view的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 function somecontrollerfunction() { $data['pagetitle'] = "Welcome to jb51.net"; $this->l

win8系统中Word稿纸加载项无法卸载怎么办

  word工具是我们在日常办公中经常会使用到的办公软件,它对我们的重要性不言而喻.但是,最近却有不少Win8系统用户反映自己在打开office2003的时候,系统提示"无法访问".经过分析后发现是稿纸加载项上出了问题,我们只有选择卸载才能解决,但是用户在卸载时又发现根本无法卸载.那么,遇到这种情况我们该怎么办呢?接下来,小编就向大家分享win8系统中Word稿纸加载项无法卸载的处理方法.   1.首先,咱们需要返回到win8系统的传统桌面位置,之后,咱们同时按下键盘上的win+R快捷

reference-QT中ortp库加载后,里面的函数未定义的问题

问题描述 QT中ortp库加载后,里面的函数未定义的问题 undefined reference to `ortp_init' 解决方案 http://blog.csdn.net/nemo2011/article/details/7371266 解决方案二: 你对应函数delib库没有link进来 解决方案三: 具体怎么做啊,不会弄那个,能说下步骤吗?