Extjs4快速上手三——实现主界面

原文 http://www.cnblogs.com/good-temper/archive/2013/04/12/3015843.html

晕啊,今天不顺啊,白天毕设因为一个小问题耽误了很长时间,刚写了一半了突然浏览器又卡死,打开后又待重新写。。。。。。

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

时间: 2024-09-17 04:33:46

Extjs4快速上手三——实现主界面的相关文章

Extjs4快速上手二——基础知识(一)

原文 http://www.cnblogs.com/good-temper/archive/2013/04/02/2996544.html 首先声明一下,在此介绍的内容多数来自"Extjs中文学习手册",这好像是一位前辈的博文整理,想快速全面学习Extjs4的可以看一下.      1.1 下载Extjs4                下载地址:http://extjs.org.cn/ (也可以去官方下),版本4.1.1      1.2 在项目中加入Extjs文件        

Extjs4快速上手二——基础知识(二)

原文 http://www.cnblogs.com/good-temper/archive/2013/04/07/3003270.html 事隔几天继续开写,由于水平所限理论的东西写起来的确很费劲,现在就将就着写吧,等后边的实践部分或许会好点.今天主要讲讲Extjs4的MVC. 1.1  谈谈MVC MVC,这个概念或许算是当下最流行的设计模式,java中的SSH.SpringMVC,.net的MVC框架,php的smarty等,哪门语言不来个MVC框架都不好意思说自己是主流的.下边是贴过来的一

Extjs4快速上手四——实现菜单

原文 http://www.cnblogs.com/good-temper/archive/2013/04/16/3023263.html 这几天状态不佳,杂事太多有些烦心,这一次就少讲点吧. 本次将主要讲Extjs树形菜单的实现.在很多系统里边,树形菜单被广泛应用,主要因为其有清晰的层次结构.记得最早见到的树形菜单是通 过<ul><li>实现的,非常简单.之后用C#的现成控件拖拽了一个,当时还沾沾自喜.再后来在学习师兄的一个通用后台代码 时,看到了梅花雪,当时感觉太强大了,每个节

《Axure RP8产品原型设计快速上手指南》一第1章 基础界面1.1 默认界面

第1章 基础界面 Axure RP8产品原型设计快速上手指南 1.1 默认界面 在经历一个个漫长的beta版本之后,我们终于迎来了Axure RP8版本的正式发布,其LOGO从以极具扁平化的蓝色为主色调进化以紫色为主色调.Axure的每一次版本发布都是整个产品界瞩目的事件,从RP7版本刚发布我们就在畅想RP8版本的发布会有哪些变化. 从本次发布的版本来看,Axure RP8在整体UI方面更加扁平化,更加突出一些核心功能和灰度原型的精髓,添加和改善了一些功能.从本节开始我们会一点点介绍全新的Axu

Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示   在Silverlight+WCF 新手实例 象棋 主界面-棋谱-布局写谱(三十六)中,我们完成下棋双方的棋谱显示,这节,我们为观众增加棋子列表: 观众进入房间后,第一时间当然也要获取棋步列表了,不然进来干麻呢?你当这是聊天室啊,光聊天不看棋.   首先,当然是要在服务端添加一个获取棋步列表的接口方法了: WCF服务端,IService.cs:  /// <summary>     /// 服务端方法接口 by 路过秋天

Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放(三十九)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示   本节完后,同时会更新Silverlight+WCF 新手实例 象棋 专题索引,并顺路提供第八阶段源码   在Silverlight+WCF 新手实例 象棋 主界面-棋谱-布局写谱(三十六)节中,我们完成了下棋双方的棋谱传递 在Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)节中,我们完成了观棋者获取棋谱列表 在本节中,我们要进行最一步了,棋谱回放: 首先,当用户进入列表后,获取完棋谱信息之

Silverlight+WCF 新手实例 象棋 主界面-状态重置(三十四)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示   正如我们在:Silverlight+WCF 新手实例 象棋 主界面-事件区-求和认输(三十二)里面提到的一样: "游戏结束了,要干点什么呢?当然就是棋盘复位了,按钮重置了,如果还有棋谱之类的,全都得重置.这些,我们留下到另一节优化处理吧."   所以,本节就做这些手尾工作了. 由于游戏结束,我们复位的工作很多,至少有N个控件需要复位,因此,Silverlight+WCF 新手实例 象棋 主界面-控件消息传递(二

Silverlight+WCF 新手实例 象棋 主界面-事件区-求和认输(三十二)

在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示   事隔几篇,我们又回到事件区,继续其它两个按钮事件,来张图吧: 在Silverlight+WCF 新手实例 象棋 主界面-事件区-游戏开始(二十七) 和之后的几篇,我们实现了游戏开始, 在这篇之前,基本上双方已可以对战了,看似主体功能已完成.只是,大伙都知道,细节的东西,才是花时间的,漫长的路还在后面....... 如标题所示,这节实现"求和+认输"两个事件.   每次开始,我们都习惯的先写WCF服务端代码,再回

数据库工程师快速上手MaxCompute进行ETL

案例说明 本案例主要是介绍如何通过数加MaxCompute+大数据开发套件两个产品实现简单的网站数据统计分析. 适用人群 MaxCompute初学者,特别是无大数据开发基础但有数据库使用基础. 案例侧重 数据库工程师快速上手MaxCompute进行大数据开发,简单了解在MaxCompute做大数据ETL过程,同时了解一些MaxCompute SQL和常用数据库SQL的基本区别. 示例介绍 房产网上经常会看到一些排行榜,如最近30日签约的楼盘排行.签约金额的楼盘排行等,本示例我们简单介绍通过对二手