很久前知道ExtJS 這個Javascript庫,更聽說ExtJS 實現的界面效果非常漂亮。但是遺憾的是一直沒有用過,直到今天才下載下來學習學習,其實得感謝一個人,那就是BeanSoft,是他的一篇extjs應用,讓本人燃起了學習extjs的欲火(),筆者個人覺得分享自己的知識是我享受別人勞動成果后的一種義務和職責。不過出于水平所限,能分享的也實在有限。

             ext-2.1 是新出的一個版本,其開源協議從以前的LGPL 轉變成了 GPL 。對使用者來說多少會有一定影響。讀者若對兩種開源協議有困惑,可以查閱筆者先前轉載的文章:五種開源協議的比較(BSD,Apache,GPL,LGPL,MIT)

          入門MessageBox 篇:

          相信廣大讀者對以前javascript中的alert 函數相當熟悉,至少使用過多次吧。在筆者早期學習javascript的過程中,那時候缺少有效的調試工具,就老愛用alert 來輔助調試(曾因此獲得不少批評),直到后來多了許多優秀的js調試工具,比如firebug之類的。以MessageBox 作為入門學習篇,應該不算錯誤之舉吧。下面就總結下自己的學習過程及發現。
             首先從 http://extjs.com 下載到ext壓縮包,解壓后,直接就“靠!”了一句。20多M,太大了,沒法用啊。進入目錄后發現其實內部帶有許多你在使用的時候,不必一股腦引用的東西。比如docs 比如 examples 等等目錄文件,一般是文檔資料,演示范例罷了。第一件事情做減法,把你不用的文件刪掉。最后剩下幾個核心JS 和資源 。

             創建工程,建立MessageBox.html:

          <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" >
          < html >
              
          < head >
                  
          < meta  http-equiv ="Content-Type"  content ="text/html; charset=UTF-8"   />
                   
          < link  rel ="stylesheet"  type ="text/css"  href ="ext/resources/css/ext-all.css" >
                  
          < script  type ="text/javascript"  src ="ext/ext-base.js" ></ script >
                  
          < script  type ="text/javascript"  src ="ext/ext-all.js" ></ script >
                  
          < title > 學習ExtJS之Panel </ title >
                  
          < script  type ="text/javascript" >
                      
          function  TestPanel()
                      {
                          Ext.MessageBox.alert('Status', 'Changes saved successfully.');
                      }
                      
          </ script >
              
          </ head >
              
          < body  onload ="TestPanel();" >
              
          </ body >
          </ html >

          通過代碼中引入JS 的路徑,可以見筆者對ext的目錄有所調整。運行怎么樣看到效果了吧:

             extjs_message_box_1.JPG
          使用是簡單的,Ext.MessageBox.alert('Status', 'Changes saved successfully.');和我們以前用alert一樣就一行就行了。而且其可以帶回調參數Ext.MessageBox.alert('Status', 'Changes saved successfully.',fun1);這句效果是關閉或者點擊確定后,將調用fun1函數。還發現Extjs 有個特別新鮮的函數:

             Ext.onReady( function ()
             {
                 Ext.MessageBox.alert('Status', 'Changes saved successfully.');
             
              });

          寫了這個函數就不用再在onload里加事件了。因為onReady 就是頁面加載完成調用函數。

          對應原來的confirm函數 ext也與自己的:   

          Ext.onReady( function ()
             {
                 Ext.MessageBox.confirm('標題', '需要讓用戶確認的內容
          ? ',showResult);
             
              });
              
          function  showResult(btn)
              {
                  
          // alert(btn);
                   // btn 為yes 或者 no 
              }

          通過回調函數showResult 參數btn 能得到用戶選擇的是yes 還是no。下面是效果圖:
          extjs_message_box_2.JPG

          當然ExtJS 還為我們準備好了prompt函數:

          Ext.onReady( function ()
             {
                 Ext.MessageBox.prompt('姓名', 'Please enter your name:', showResult);
             
              });
              
          function  showResult(btn,text)
              {
               
          // alert(btn);
                // alert(text);
              }


          效果圖如下:
          extjs_message_box_3.JPG

          這個函數的回調函數第一個參數能得到ok 或者cancel ,第二個參數是獲取用戶輸入信息。

          還有比較靈活的show用法:

          Ext.onReady( function ()
                      {
                          Ext.MessageBox.show(
                             {
                                 title: 'Address',
                                 msg: 'Please enter your address:',
                                 width:
          300 ,
                                 buttons: Ext.MessageBox.OKCANCEL,
                                 multiline: 
          true ,
                                 fn: showResult
                                                    });                
                            });    
                      
                      
          function  showResult(btn,text)
                       {
                           alert(btn);
                          alert(text);
                       }

          上面實現的效果是:
          extjs_message_box_4.JPG
          這種用法比較靈活,不需要用戶輸入multiline 值設置為false就行了。

          如果改變下面按鈕組為:buttons: Ext.MessageBox.YESNOCANCEL,
          那下面的按鈕馬上就變了,看看下圖效果。

          extjs_message_box_5.JPG
          常見按鈕組有如下一些:

          Ext.MessageBox.OK
          Ext.MessageBox.YESNO
          Ext.MessageBox.YESNOCANCEL
          Ext.MessageBox.OKCANCEL

          若給show增加一個icon效果(加入一行代碼:icon: Ext.MessageBox.QUESTION):
          extjs_message_box_6.JPG
          還有如下幾種常用圖標:
          Ext.MessageBox.INFO;
          Ext.MessageBox.QUESTION;
          Ext.MessageBox.WARNING;
          Ext.MessageBox.ERROR;

             在extjs messagebox實例中還有一些進度條的使用。
          Ext.onReady(function()
                      {
                          Ext.MessageBox.show(
                             {
                                 title: 'Please wait',
                                 msg: 'Loading items',
                                 progressText: 'Initializing',
                                 width:
          300,
                                 progress:
          true,
                                 closable:
          false
                                 
                                 
          //animEl: 'mb3'
                              });    
                              
          var f = function(v){
                                  
          return function(){
                                      
          if(v == 12){
                                          Ext.MessageBox.hide();
                                          
          //Ext.example.msg('Done', 'Your fake items were loaded!');
                                      }else{
                                          
          var i = v/11;
                                          Ext.MessageBox.updateProgress(i, Math.round(
          100*i)+'% completed');
                                      }
                                 };
                             };
                             
          for(var i = 1; i < 13; i++){
                                 setTimeout(f(i), i
          *500);
                             }            
                            });    

          效果如下:
          extjs_message_box_7.JPG
          至于進度條在實際中應用,進度函數是需要自己處理的,不然是沒什么意義的。
          注意value為0-1之間的數,表示進度條的進度.這種比較普通。
          還有一種:
           第二種:(通過固定時間控制進度加載)
          Ext.get("btn1").on(
                    
          "click",
                    
          function(){
                       Ext.MessageBox.show({
                           title:
          "時間進度條",
                           msg:
          "5s后關閉進度框",
                           progress:
          true,
                           width:
          300,
                           wait:
          true,
                           waitConfig:{interval:
          600},//0.6s進度條自動加載一定長度
                           closable:true
                       });
                       setTimeout(
          function(){Ext.MessageBox.hide()},5000);//5后執行關閉窗口函數
                    }
          最后關于那個waitConfig的參數,在此說明下:
          1.interval:進度的頻率
          2.duration:執行進度失效時間,但進度消失。
          3.fn:duration的時間到后執行的函數
          所以,另外一種寫法為:
              Ext.get(
          "btn1").on(
                    
          "click",
                    
          function(){
                       Ext.MessageBox.show({
                           title:
          "時間進度條",
                           msg:
          "5s后關閉進度框",
                           progress:
          true,
                           width:
          300,
                           wait:
          true,
                           waitConfig:{
                                        interval:
          600,
                                        duration:
          5000,
                                        fn:
          function(){
                                          Ext.MessageBox.hide();
          //讓進度條消失
                                        }},
                           closable:
          true
                       });
                       
          //setTimeout(function(){Ext.MessageBox.hide()},5000);
                    }
             );


          實際上我對extjs比較喜歡的是grid 部分,表格功能相當強大。下期將對grid 的使用做專門的總結。
          posted on 2008-07-05 18:47 -274°C 閱讀(11134) 評論(6)  編輯  收藏 所屬分類: web前端


          FeedBack:
          # re: ExtJS 入門學習之 messagebox篇[未登錄]
          2008-07-08 15:34 | hawk
          我下載的是ext-2.1,根本就沒有ext/ext-base.js文件,直接報錯EXT找不到  回復  更多評論
            
          # re: ExtJS 入門學習之 messagebox篇
          2008-07-08 16:59 | java-he
          @hawk

          ext-2.1\adapter\ext 下面看看。  回復  更多評論
            
          # re: ExtJS 入門學習之 messagebox篇
          2008-07-19 18:06 |
          我下載的是2.1為什么eclipse一直跟我說EXT沒有定義,不知道是為什么?  回復  更多評論
            
          # re: ExtJS 入門學習之 messagebox篇
          2008-07-20 17:30 | java-he
          @云

          注意引入js的路徑是否匹配。  回復  更多評論
            
          # re: ExtJS 入門學習之 messagebox篇
          2010-05-28 15:33 | 路人甲
          您好,我照你的方法寫的,進度條,但是運行的時候,進度條顯示出來了,就是不走,怎么回事啊,我用的是ext3.2.0版的,難道跟版本有關系嗎?  回復  更多評論
            
          # re: ExtJS 入門學習之 messagebox篇
          2010-06-25 11:38 | -274°C
          @路人甲

          版本會有關系的,新版本請參照新版本中自帶的demo 。很久沒寫EXTJS,所以幫不上忙,請諒解。  回復  更多評論
            

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 916805
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 友谊县| 库车县| 靖州| 错那县| 什邡市| 天台县| 江口县| 克什克腾旗| 台中县| 潜山县| 祥云县| 漾濞| 尖扎县| 平阳县| 洪江市| 宜都市| 文昌市| 淮阳县| 栾城县| 天全县| 育儿| 石嘴山市| 托里县| 江津市| 营山县| 莎车县| 广安市| 四子王旗| 罗平县| 兴城市| 河西区| 青神县| 克东县| 巫山县| 和林格尔县| 山西省| 德兴市| 民乐县| 龙南县| 荃湾区| 岳普湖县|