7.1 Ext.MessageBox
1 7.1 Ext.MessageBox 2 //Ext.MessageBox為我們提供的alert/confirm/prompt等完全可以代替瀏覽器原生; 3 7.1.1 Ext.MessageBox.alert() 4 Ext.MessageBox.alert('標題','內容',function(btn){ 5 //參數一:窗口的標題; 6 //參數二:窗口的內容; 7 //參數三:回調函數; 8 alert('你剛剛點擊了'+btn); 9 }); 10 11 7.1.2 Ext.MessageBox.confirm() 12 //confirm為用戶提供了Yes和No,它們會在需要用戶作出判斷時用到; 13 Ext.MessageBox.confirm('選擇框','你要選擇yes還是no?',function(btn){ 14 alert('你剛剛點擊了'+btn); 15 }); 16 //用戶選擇Yes或No之后,回調函數即被調用,btn參數的值可能是yes或no,通過得到的值就可以知道用戶點擊了哪個按鈕; 17 18 7.1.3 Ext.MessageBox.prompt() 19 //prompt允許用戶輸入一段字符串,然后提交給JS處理; 20 //prompt還提供了兩個按鈕,用戶可以決定是否將輸入的內容提交; 21 Ext.MessageBox.prompt('輸入框','你輸入帳號',function(btn,text){ 22 alert('你剛剛點擊了'+btn+',你剛剛輸入了'+text); 23 }); 24 //回調函數參數一:代表用戶點擊的按鈕; 25 //回調函數參數二:用戶輸入的字符;
7.2 對話框的更多配置--show()
1 7.2 對話框的更多配置--show() 2 7.2.1 可以輸入多行的輸入框 3 Ext.MessageBox.show({ 4 title:'多行輸入框', //對話框標題; 5 msg:'你可以輸入好幾行', //對話框顯示的提示內容; 6 width:300, 7 buttons:Ext.MessageBox.OKCANCEL, //對話框的按鈕,Ext.MessageBox已預置; 8 multiline:true, //允許多行; 9 fn:function(btn,text){ //回調函數; 10 alert('你剛剛點擊了'+btn+',你剛剛輸入了'+text); 11 } 12 }); 13 14 7.2.2 自定義對話框的按鈕 15 Ext.MessageBox.show({ 16 ... 17 buttons:Ext.MessageBox.YESNOCANCEL, 18 //Ext.MessageBox預置的yes/no/cancle按鈕; 19 .. 20 }); 21 22 7.2.3 進度條 23 //Ext.MessagesBox提供了默認的進度條; 24 Ext.MessageBox.show({ 25 title:'請等待', 26 msg:'讀取數據中', 27 width:240, 28 progress:true, //顯示進度條參數; 29 closable:false //隱藏右上角的關閉按鈕; 30 }); 31 var f = function(v){ 32 return function(){ 33 if(v == 11){ 34 Ext.MessageBox.hide(); 35 }else{ 36 Ext.MessageBox.updateProgress(v/10,'正在讀取第'+v+'個,一共10個'); 37 //updateProgress()函數讓進度條狀態發生變化; 38 } 39 }; 40 }; 41 for(var i=1; i<12; i++){ 42 setTimeout(f(i),i*1000); 43 //定時器;10秒之后進度條將隱藏; 44 } 45 //也可以直接使用progress函數↓↓↓↓↓ 46 Ext.MessageBox.progress('請等待',msg:'讀取數據中'); 47 >2.自動變化的進度條提示框 48 Ext.MessageBox.wait('請等待',msg:'讀取數據中'); 49 50 7.2.4 動畫效果 51 //使用animEl:為對話框設置彈出和關閉的動畫效果; 52 //對話框會依據指定的HTML元素播放彈出和關閉的動畫; 53 Ext.MessageBox.show({ 54 ... 55 animEl:'dialog' 56 //對應動畫是基於id='dialog'的元素; 57 }); 58 59 //Ext.MessageBox =Ext.Msg 60 //Ext.Msg彈出的對話框都是基於同一個內部Ext.Window實例;因此不能同時使用Ext.MessageBox彈出多個對話框;頁面只會顯示最后一個窗口;
7.3 Ext.Window的常用屬性
1 7.3 Ext.Window的常用屬性 2 7.3.1 創建窗口--Ext.Window 3 var win = new Ext.Window({ 4 layout:'fit', //彈出窗口內布局會充滿整個窗口; 5 width:500, //設置窗口大小; 6 height:300, 7 closeAction:'hide', //點擊右上角關閉按鈕后會執行的操作; 8 closable:false, //隱藏關閉按鈕; 9 draggable:true, //窗口可拖動; 10 items:[{}], //默認會生成Ext.Panel類型的對象;並且隨窗口大小改變而改變; 11 buttons:[{ 12 text:'按鈕' 13 }] 14 }); 15 win.show(); 16 //closeAction:'hide':關閉窗口時執行隱藏命令,之后還可以使用show()函數顯示剛剛關閉的窗口; 17 //closeAction:'close':關閉窗口時把窗口對象銷毀;不能再執行show()了; 18 19 7.3.1 窗口的最大化和最小化 20 var win = new Ext.Window({ 21 .. 22 minimizable:true, //窗口最小化按鈕; 需重寫minimize()函數; 23 maximizable:true //窗口最大化按鈕; 24 }); 25 26 7.3.3 窗口的隱藏與銷毀 27 >1.closeAction:'close' 28 //關閉窗口時,Ext會將窗口對象和其對應的DOM模型完全銷毀,銷毀之后的窗口無法通過調用show()函數顯示到頁面上; 29 >2.closeAction:'hide' 30 //關閉窗口時,自動隱藏,之后可以通過show()顯示出來; 31 >3.Ext.Window.hide()/.show() 32 //調用自定義函數替代closable; 33 >4.closable:false //隱藏關閉按鈕; 34 35 7.3.4 防止窗口超出瀏覽器邊界 36 >1.constrain:true 37 //保證整個窗口不會越過瀏覽器的邊界; 38 >2.constrainHeader:true 39 //值保證窗口的頂部不會越過瀏覽器的邊界; 40 41 7.3.5 設置窗口中的按鈕 42 //通過buttons參數指定窗口下部的按鈕 43 var win = new Ext.Window({ 44 ... 45 defaultButton:0, //默認第一個按鈕為選中狀態,Enter鍵即可提交; 46 buttons:[{ 47 text:'確定', 48 handler:function(){ //點擊后隱藏窗口; 49 win.hide(); 50 } 51 },{ 52 text:'取消' 53 }] 54 }); 55 win.show(); 56 57 7.3.6 窗口的其他配置選項 58 //通過resizable:控制窗口是否可以通過拖放改變大小; 59 //通過resizeHandles:設置可拖拽的角度控制點; 60 var win = new Ext.Window({ 61 width:300, 62 height:100, 63 closeAction:'hide', 64 resizable:true, //窗口可拖動改變大小; 65 resizeHandles:'se', //south-east:右下角可拖動; 66 modal:true, //設置彈窗之后屏蔽掉頁面上所有的其他組件; 67 animateTarget:'target', //Ext彈窗從指定的HTML元素彈出或關閉窗口動畫; 68 plain:true //使窗體主體更融於框架顏色; 69 }); 70 Ext.get('target').on('click',function(){ 71 win.show(); 72 }) 73 <button id="target">target</button>
7.4 窗口分組
1 7.4 窗口分組 2 //在Ext中,窗口是分組進行管理的,可以對某一組中的窗口執行特定的操作; 3 //窗口都在Ext.WindowMgr組中;窗口分組由Ext.WindowGroup類定義; 4 var i = 0; 5 function newWin() { //自定義創建窗口函數; 6 var id=i++; 7 var win=new Ext.Window({ //創建窗口; 8 headerPosition:'top', //窗口標題的方位; 9 title:'窗口'+id, 10 width:400, 11 height:300, 12 maximizable:true //窗口最大化; 13 }); 14 win.show(); 15 }; 16 function toBack() { //窗口層最后; 17 Ext.WindowManager.sendToBack(Ext.windowManager.getActive()); 18 //WindowManager:窗口組; 19 //getActive():當前最頂層窗口; 20 }; 21 function hideAll() { //隱藏所有窗口; 22 Ext.WindowManager.hideAll(); 23 }; 24 Ext.onReady(function(){ 25 Ext.get('btn').on('click',newWin); //點擊按鈕觸發函數; 26 Ext.get('btnToBack').on('click',toBack); 27 Ext.get('btnHide').on('click',hideAll); 28 });
7.5 向窗口中放入各種控件
1 7.5 向窗口中放入各種控件 2 //窗口(window)繼承自Ext.Panel;支持在內部嵌套其他組件; 3 7.5.1 在窗口中加入表格 4 //創建表格后不必render(),而是直接加入窗口的items參數中; 5 //窗口會在顯示時自動渲染內部的組件; 6 var columns = [...]; 7 var data = [...]; 8 var store = new Ext.data.ArrayStore({...}); 9 store.load(); 10 var grid = new Ext.grid.GridPanel({ 11 store:store, 12 columns:columns, 13 layout:'fit' 14 }); 15 //表格初始化↑↑↑↑;並且沒有進行render(); 16 var win = new Ext.Window({ 17 layout:'fit', 18 width:500, 19 height:300, 20 closeAction:'hide', 21 items:[grid], //在彈窗中嵌套表格; 22 buttons:[{text:'按鈕'}] 23 }); 24 25 7.5.2 在窗口中加入表單 26 //在form中去掉title參數;在window里設置; 27 //沒有設置form的寬和高,它會根據外部窗口的大小; 28 var form = new Ext.form.FormPanel({ 29 defaultType:'textfield', 30 items:[{ 31 fieldLabel:'文本', 32 name:'text' 33 },{ 34 fieldLabel:'日期', 35 name:'data', 36 xtype:'datafield' 37 }] 38 }); 39 var win = new Ext.Window({ 40 layout:'fit', 41 title:'嵌套表單', 42 items:[form], //嵌入表單; 43 buttons:[{text:'按鈕'}] 44 }); 45 win.show(); 46 47 7.5.3 復雜布局 48 //左側可折疊nav,中間是Tab頁; 49 var tabs = new Ext.TabPanel({ 50 region:'center', //BorderLayout布局的中間; 51 margins:'3 3 3 0', 52 activeTab:0, 53 defaults:{autoScroll:true}, 54 items:[{ 55 title:'默認', 56 html:'tab1' 57 },{ 58 title:'可關閉標簽', 59 html:'tab2', 60 closable:true 61 }] 62 }); 63 var nav = new Ext.Panel({ 64 title:'可折疊導航', 65 region:'west', //BorderLayout布局的左側; 66 split:true, 67 collapsible:true, 68 margins:'3 0 3 3', 69 cmargins:'3 3 3 3' 70 }); 71 var win = new Ext.Window({ 72 title:'窗口嵌套可折疊和Tabs', 73 layout:'border', //為窗口指定BorderLayout布局; 74 closable:true, 75 width:600, 76 height:350, 77 border:false, 78 items:[nav,tabs] //引入nav和tabs; 79 }); 80 win.show();