1. 程式人生 > >ExtJS2 0開發與實踐筆記 2 ——Ext中的Layout

ExtJS2 0開發與實踐筆記 2 ——Ext中的Layout

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                我們都知道java中有佈局管理器的概念,通過調整佈局器可以簡化我們對可視元件的管理。而在Ext中同樣提供了自己的佈局實現,以簡化web介面的開發與定製。

如下圖所示,Ext的Layout可分解為東、西、南、北、中5個基本區域。


在ExtJS2.0實現中,我們可以寫成如下程式碼樣式。ExtJS2.0配置方法如下: 初識ExtJS

LayoutExt.js
/**/ /**
 * <p>Title: LoonFramework</p>
 * <p>Description:Ext的Layout用例</p>
 * <p>Copyright: Copyright (c) 2008</p>
 * <p>Company: LoonFramework</p>
 * <p>License: http://www.apache.org/licenses/LICENSE-2.0</p>
 * @author chenpeng
 * @email:[email protected]
 * @version 0.1
 
*/

LayoutExt 
=   function () ... {
    
//設定佈局器及面板
    
//Ext1.1為Ext.BorderLayout
    var Viewport = Ext.Viewport;
    
//變數設定
    var root;
    
var layout;
    
//返回LayoutExt操作結果到onReady
    return ...{
        init: 
function()...{
            root 
= this;
            
//初始化Ext狀態管理器,此類可返回使用者在Cookie中的操作狀態
            Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
            
            layout 
= new Viewport(...{
                
//佈局方式,'border'
                layout: 'border',
                items: [ 
//北      
                ...{
                    region: 
'north'//顯示區域
                    contentEl: 'north'//繫結的content
                    title: 'North'//名稱
                    split: false,//分割線
                    collapsible: true//是否允許折起
                    //在ie下無此項會報錯(firefox無事……),預設分別為此佈局左、上、右、下的邊距,以此防止越界造成的崩潰。
                    //也可寫作 'Object:數值'的形式,如 margins:{top: 0, left: 0, right:0, bottom: 0}
                    margins: '0 0 0 0' 
                }
//西            
                ...{
                    region: 
'west'//顯示區域
                    contentEl: 'west'//繫結的content
                    title: 'West'//名稱
                    split: true,//分割欄
                    width: 80//
                    margins: '0 0 0 0' //在ie下無此項會報錯
                }
//
                ...{
                    region: 
'east'//顯示區域
                    contentEl: 'east'//繫結的content
                    title: 'East'//名稱
                    width: 80,
                    split: 
true,//分割欄
                    margins: '0 0 0 0' //在ie下無此項會報錯
                }
//南             
                ...{
                    region: 
'south'//顯示區域
                    contentEl: 'south'//繫結的content
                    title: 'South'//名稱
                    split: true,//分割欄
                    margins: '0 0 0 0' //在ie下無此項會報錯
                }
//
                 new Ext.TabPanel(...{
                                    region: 
'center',
                                    deferredRender: 
false,
                                    activeTab: 
0//活動的tab索引
                                    items: [...{
                                        contentEl: 
'center1',
                                        title: 
'中央區域1',
                                        closable: 
true//關閉項
                                        autoScroll: true //是否自動顯示滾動條
                                    }
...{
                                        contentEl: 
'center2',
                                        title: 
'中央區域2',
                                        autoScroll: 
true
                                    }
]
                 }
)
                ]
            }
);
        }

    }
;
}

();
// 載入onReady
Ext.onReady(LayoutExt.init, LayoutExt,  true );


LayoutExt.html (定義html頁面,設定及引用ext)
< html >
    
< head >
        
< meta  http-equiv ="Content-Type"  content ="text/html; charset=UTF-8" >
        
< title > LayoutExt </ title >
        
<!-- 載入ExtJs資源 -->
        
< link  rel ="stylesheet"  type ="text/css"  href ="resources/css/ext-all.css" />
        
< script  type ="text/javascript"  src ="adapter/ext/ext-base.js" > ...
        
</ script >
        
< script  type ="text/javascript"  src ="ext-all.js" > ...
        
</ script >
        
<!-- 我的js -->
        
< script  type ="text/javascript"  src ="LayoutExt.js" > ...
        
</ script >
        
<!-- 樣式 -->
        
< style  type ="text/css" > ...
            html, body 
{...}{
                font
: normal 12px verdana;
                margin
: 0;
                padding
: 0;
                border
: 0 none;
                overflow
: hidden;
                height
: 100%;
            
}

        
</ style >
    
</ head >
    
< body >
        
< div  id ="north"  class ="x-layout-inactive-content" >
            北方
        
</ div >
        
< div  id ="west"  class ="x-layout-inactive-content" >
            西方
        
</ div >
        
< div  id ="east"  class ="x-layout-inactive-content" >
            東方
        
</ div >
        
< div  id ="south"  class ="x-layout-inactive-content" >
            南方
        
</ div >
        
< div  id ="center1"  class ="x-layout-inactive-content" >
            中央區域1
        
</ div >
        
< div  id ="center2"  class ="x-layout-inactive-content" >
            中央區域2
        
</ div >
    
</ body >
</ html >

顯示效果如下圖:


我們可以看到,Ext2.0的佈局實際上是利用json進行元素標識後在dom元素上巢狀實現的,所以我們也可以很簡單的將其他元件插入到layout中去。

LayoutExt2.js
/**/ /**
 *
 * <p>Title: LoonFramework</p>
 * <p>Description:Ext的內部Layout巢狀用例</p>
 * <p>Copyright: Copyright (c) 2008</p>
 * <p>Company: LoonFramework</p>
 * <p>License: http://www.apache.org/licenses/LICENSE-2.0</p>
 * @author chenpeng
 * @email:[email protected]
 * @version 0.1
 
*/

Ext.onReady(
function () ... {
    
//設定佈局器及面板
    
    
var layout;
    
var Pane=Ext.Panel;
    
var Border=Ext.Viewport;
    
//初始化Ext狀態管理器,此類可返回使用者在Cookie中的操作狀態
    Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
    
//生成內部佈局
    var item1 = new Pane(...{
        title: 
'選項1'
    }
);
    
    
var item2 = new Pane(...{
        title: 
'選項2'
    }
);
    
    
var item3 = new Pane(...{
        title: 
'選項3'
    }
);
    
//表格
    var grid=  new Ext.grid.PropertyGrid(...{
                                title: 
'表格巢狀',
                                closable: 
true,
                                source: 
...{
                                    
"(name)""grid",
                                    
"grouping"false,
                                    
"autoFitColumns"true,
                                    
"productionQuality"false,
                                    
"created"new Date(Date.parse('03/18/2008')),
                                    
"tested"false,
                                    
"version": .01,
                                    
"borderWidth"1
                                }

                            }
);
    layout 
= new Border(...{
        layout: 
'border',
        items: [
...{
            region: 
'west',
            title: 
'west',
            
//此佈局採用摺疊樣式
            layout: 'accordion',
            collapsible: 
true,