Extjs4快速上手三——實現主界面


  暈啊,今天不順啊,白天畢設因為一個小問題耽誤了很長時間,剛寫了一半了突然瀏覽器又卡死,打開后又待重新寫。。。。。。

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.js
Ext.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.js
Ext.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM