深入淺出ExtJS 第七章 彈出窗口


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();

 


免責聲明!

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



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