晕啊,今天不顺啊,白天毕设因为一个小问题耽误了很长时间,刚写了一半了突然浏览器又卡死,打开后又待重新写。。。。。。
1 创建项目
这个不多说,新建个Web project都会吧。
2 导入Extjs文件
在WebRoot下新建ext文件夹,将下载的ext包中如下文件拷入:

3 创建所需文件夹及文件
按照如下结构创建文件夹及文件:

绿色框住的为本次必须文件。
4 编写代码
首先编写index.jsp,这是Extjs的入口页面(其实准确地说Extjs在运行过程中只存在这一个页面,其他的都是其用js生成的组件而已,其本质是div+css),在其内部引入Extjs库文件和样式文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>ExtTest</title>
<link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css" />
<link rel="stylesheet" type="text/css" href="css/style.css">
<script type="text/javascript" src="ext/ext-all.js"></script>
<script type="text/javascript" src="app.js"></script>
</head>
</html>
接着是app.js,这个之前已经说过,是Extjs的启动文件,其内容如下:
Ext.Loader.setConfig({enabled: true}); //开启动态加载
Ext.application({
name:'et', //呵呵,就是ExtTest
autoCreateViewport: true,
appFolder:'app', //指定根目录
controllers:[
'Menu' //在这里引入菜单,下次将详细介绍如何实现菜单加载
]
});
原来说过,如果不知名Viewport的话,ext将自动去加载view下的Viewport类,而该类应该继承Ext.Viewport,并且完成主界面的创建,其内容如下:
Ext.define('et.view.Viewport',{
extend: 'Ext.Viewport',
layout: 'fit',
hideBorders: true,
requires : [
'et.view.Header',
'et.view.Menu',
'et.view.TabPanel',
'et.view.South'
],
initComponent : function(){
var me = this;
Ext.apply(me, { //这里讲items加入当前类(即Viewport),其实直接配置Viewport的items效果一样
items: [{
id:'desk',
layout: 'border', //这个是个重点,该布局实现“东西南北中”布局,具体细节可自己查找,网上一大堆
items: [
Ext.create('et.view.Header'), //创建上侧头
Ext.create('et.view.Menu'), //创建左侧菜单
Ext.create('et.view.TabPanel'), //创建中间panel选项卡
Ext.create('et.view.South') //创建下侧栏
]
}]
});
me.callParent(arguments);
}
});
下边是各部分的js文件,就不一一介绍了,只要能弄明白调用以及每个内部items的嵌套关系,并且知道ext常见的布局效果,很容易就能看懂。
Header.jsExt.define('et.view.Header', {
extend: 'Ext.panel.Panel' ,
border: false,
layout:'anchor',
region:'north',
cls: 'docs-header',
height:80,
items: [{
id:'header-top',
xtype:'box',
cls:'header',
border:false,
anchor: 'none -25',
html:'<span style="margin-left:10px;font-size:30;color:white;FONT-FAMILY:微软雅黑">ExtTest</span>'
//html:'<h1>实训管理系统</h1>'
},new Ext.Toolbar({
items:[
{
//此处加载登录用户信息
xtype:'label',
iconCls: 'grid-add',
id:'head-lb-1',
cls:'welcome',
text:'欢迎登陆,XXX',
margin:'0 20 0 20'
},
{
xtype:'label',
id:'head-lb-3',
margin:'0 20 0 50',
cls:'welcome',
text:'当前日期:2013-03-20'
}, '->', {
xtype:'button',
text:'打开首页',
iconCls: 'grid-add',
//tooltip: '全屏显示主操作窗口',
handler: function(){
}
},'-', {
xtype:'button',
text:'注销',
iconCls: 'grid-add',
handler: function(){
}
},'-'
]}
)]
});
Menu.jsExt.define('et.view.Menu',{
extend: 'Ext.tree.Panel',
alias: 'widget.sxptmenu',
requires:['et.store.Menus'],
initComponent : function(){
Ext.apply(this,{
id: 'menu-panel',
title: '系统菜单',
iconCls:'icon-menu',
margins : '0 0 -1 1',
region:'west',
border : false,
enableDD : false,
split: true,
width : 212,
minSize : 130,
maxSize : 300,
rootVisible: false,
containerScroll : true,
collapsible : true,
autoScroll: false,
store:Ext.create('et.store.Menus')
});
this.callParent(arguments);
}
});
TabPanel.js
Ext.define('et.view.TabPanel',{
extend: 'Ext.tab.Panel',
initComponent : function(){
Ext.apply(this,{
id: 'content-panel',
region: 'center',
defaults: {
autoScroll:true,
bodyPadding: 10
},
activeTab: 0,
border: false,
items: [{
id: 'HomePage',
title: '首页',
iconCls:'home',
layout: {
type: 'hbox',
pack: 'start',
align: 'stretch'
},
items: [
{
xtype: 'panel',
flex: 5,
border: 0,
width: 604,
layout: {
align: 'stretch',
type: 'vbox'
},
header: false,
title: 'p1',
items: [
{
xtype: 'panel',
flex: 1,
layout:{
type: 'absolute'
},
title: '个人信息'
},
{
xtype: 'panel',
flex: 1,
margin: '10 0 0 0 ',
layout: {
align: 'stretch',
type: 'hbox'
},
header: false,
border: 0,
title: '分组题目信息',
items:[
{
xtype: 'panel',
flex: 1,
margin: '0 0 0 0 ',
title: '分组题目信息'
},
{
xtype: 'panel',
flex: 1,
margin: '0 0 0 10 ',
title: '值日表'
}
]
},
{
xtype: 'panel',
flex: 1,
margin: '10 0 0 0 ',
title: '任务提示'
}
]
},
{
xtype: 'panel',
flex: 2,
margin: '0 0 0 10',
header: false,
border: 0,
layout: {
align: 'stretch',
type: 'vbox'
},
title: '公告列表',
items:[
{
xtype: 'panel',
flex: 1,
margin: '0 0 0 0',
title: '最新公告'
},
{
xtype: 'panel',
flex: 1,
margin: '10 0 0 0',
title: '资料下载'
}
]
}
]
}]
});
this.callParent(arguments);
}
});
South.js
Ext.define('et.view.South',{
extend: 'Ext.Toolbar',
initComponent : function(){
Ext.apply(this,{
id:"bottom",
//frame:true,
region:"south",
height:23,
items:['->',"版权所有 Copyright © 2013 计算机学院",'->']
});
this.callParent(arguments);
}
});
4 其他
目前的实现非常简单,写的熟练的话半小时就能实现。在此已经实现了菜单,但是此次就不做详细介绍留待下介绍。最后有源码,可以自己研究下。这里推荐一下Sencha Architect,可以通过它实现Extjs效果,然后通过生成的代码来学习。虽然这个收费,但有30天试用期(作为非专业前端,30天每天拿出一小时学习Extjs,到时候学到的就远远够用了)。
来张效果图:

最后是源码:http://files.cnblogs.com/good-temper/ExtTest.rar
来源:https://www.cnblogs.com/good-temper/archive/2013/04/12/3015843.html