eagle

          學(xué)無止境,細節(jié)決定成敗.
          posts - 12, comments - 11, trackbacks - 0, articles - 2
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          extjs 面向?qū)ο髮嵺`

          Posted on 2009-07-17 23:31 月下孤城 閱讀(2389) 評論(6)  編輯  收藏 所屬分類: extjs
          近期一個項目前臺采用了extjs框架,經(jīng)過一段時間的編碼,對extjs面向?qū)ο笠灿辛艘欢ǖ牧私狻R韵峦ㄟ^FormPanel擴展對表單對象中常用代碼段進行了通用提取,并以此實踐ext面向?qū)ο蟮睦^承,希望對剛接觸的朋友有所幫助。

          1.實現(xiàn)類構(gòu)造方法:
           1/*
           2 * 默認表單類
           3 * add by daiqiang
           4 * */

           5Ext.ux.DefaultFormPanel = function(config){
           6        /*FormPanel submit按鈕url*/
           7        this.subBtnUrl = config.subBtnUrl;
           8    /*submit按鈕url提交參數(shù)*/
           9    this.subBtnParams = config.subBtnParams?config.subBtnParams:{};
          10   /*submit提交完成后回調(diào)方法*/
          11       this.subBtnCallbackFun = config.subBtnCallbackFun;
          12    /*submit 顯示文本*/
          13       this.subBtnText = config.subBtnText? config.subBtnText:'保存';
          14    /*
          15        * 重置按鈕定制方法
          16        * 【主要針對表單狀態(tài)為'修改'(非'新增')時,
          17        * 提交表單數(shù)據(jù)可能含隱藏字段,
          18        * 若用reset方法將把隱藏字段值也一并清掉。
          19        * 考慮這種情況需自定義表單重置方法】
          20        * */

          21        this.resetBtnFun = config.resetBtnFun;
          22    
          23        Ext.ux.DefaultFormPanel.superclass.constructor.call(this, config);
          24}
          實現(xiàn)類構(gòu)造方法中先初始化屬性變量,然后調(diào)用繼承類的構(gòu)造方法,實現(xiàn)構(gòu)造方法的繼承擴展。

          2.使用Ext.extend方式實現(xiàn)父類方法、屬性的繼承擴展.
           1Ext.extend(Ext.ux.DefaultFormPanel,Ext.form.FormPanel,{
           2    frame:true,
           3    defaultType: 'textfield',
           4    labelAlign:'right', 
           5    bodyStyle:'padding:5px 5px 0',
           6    layout : 'form',
           7    buttonAlign : 'center',
           8    autoHeight:true,
           9 initComponent:function(){
          10        /*初始化提交、重置按鈕*/
          11        var oprBtns = [
          12            {
          13                text :this.subBtnText,
          14                id:'subFormBtn',
          15            handler :function(){
          16                this.getForm().submit({
          17                        url:this.subBtnUrl,
          18                        params:this.subBtnParams,
          19                        clientValidation: true,
          21                        method:'post', 
          22                        success:function(form, action){
          23//                               Ext.Msg.alert("Success", action.result.msg);
          24                               Ext.Msg.alert("信息", action.result.msg);
          25                               //執(zhí)行回調(diào)函數(shù)
          26                            if(this.subBtnCallbackFun){
          27                                   this.subBtnCallbackFun(this);
          28                                }
          ;
          29                         }
          .createDelegate(this),
          30                      failure: function(form, action){
          31                            switch (action.failureType){
          32                                case Ext.form.Action.CLIENT_INVALID:
          33//                                    Ext.Msg.alert("Failure", "Form fields may not be submitted with invalid values");
          34                                    Ext.Msg.alert("錯誤""提交的表單數(shù)據(jù)無效,請檢查!");
          35                                    break;
          36                                case Ext.form.Action.CONNECT_FAILURE:
          37//                                    Ext.Msg.alert("Failure", "Ajax communication failed");
          38                                    Ext.Msg.alert("錯誤""服務(wù)器連接失敗,請稍后再試!");
          39                                    break;
          40                                case Ext.form.Action.SERVER_INVALID:
          41//                                   Ext.Msg.alert("Failure", action.result.msg);
          42                                   Ext.Msg.alert("錯誤", action.result.msg);
          43                           }

          44                        }
          .createDelegate(this)
          45                    }
          );
          46                }
          .createDelegate(this)
          47            }
          ,
          48        {    
          49                text:'重置',
          50                id:'resetFormBtn',
          51            handler:function(){
          52                    if(this.resetBtnFun){
          53                             this.resetBtnkFun(this);
          54                    }
          else{
          55                            this.getForm().reset();
          56                    }

          57                }
          .createDelegate(this)
          58            }

          59        ];
          60        
          61    if(this.buttons){
          62            for(var i=0;i<oprBtns.length;i++){
          63                     this.buttons.push(oprBtns[i]);
          64               }

          65     }
          else{
          66                 this.buttons = oprBtns;
          67         }

          68        
          69        Ext.ux.DefaultFormPanel.superclass.initComponent.apply(this, arguments);
          70    }

          71}
          )

          Ext.extendFunction subclass, Function superclass, [Object overrides] ),參數(shù)分別對應(yīng)'子類對象','父類對象','覆蓋擴展父類方法屬性'。
          2-8行是對FormPanel的默認設(shè)置。接下來就是對ext 組件方法initComponent的覆蓋實現(xiàn)(了解ext組件生命周期詳情點這里),該方法中主要實現(xiàn)默認的提交、重置
          按鈕操作。注意在29行代碼success屬性方法后加了個createDelegate(this)方法,這主要是success方法中引用了類屬性this.subBtnCallbackFun,而success方法中的scope(域)
          和當(dāng)前類的scope不同,故通過Function類中的 createDelegate轉(zhuǎn)化到當(dāng)前域中。處理完自定義操作后別望了回調(diào)父類該方法,完成FormPanel的初始化工作。

          3.調(diào)用代碼片段
           1
                     ...
                      var formPanel = new Ext.ux.DefaultFormPanel({
           2                items:formItems,
           3               subBtnText:'新增',
           4               subBtnUrl : 'test/testDefaultForm.do',
                                subBtnParams:{id:'test'},   
                                items:items,  
                                 subBtnCallbackFun:
          function(){
           5                        alert('回調(diào)方法');
           6                    }

           7                }
          );
           8           new Ext.Window({
           9                    width:310,
          10                    height:400,
          11                     layout :'fit',
          12                     items:[formPanel]
          13                }
          ).show();
          代碼執(zhí)行后會彈出一個包含'新增','重置'按鈕表單的窗口.點擊新增按鈕后會執(zhí)行一系列流程:表單效驗通過->發(fā)送subBtnUrl到后臺接受數(shù)據(jù)->后臺數(shù)據(jù)接受調(diào)用回調(diào)方法,最后alert('回調(diào)方法');提示一個表單新增操作完成。



          ---------------------
          月下孤城
          mail:eagle_daiqiang@sina.com

          評論

          # re: extjs 面向?qū)ο髮嵺`  回復(fù)  更多評論   

          2009-07-17 23:42 by Gavin.lee
          hi 問你個問題,為什么你的頁面可以另存為 htm格式的呢,是你的哪里有設(shè)置嗎? 我的就不可以。也看過其他的blogjava,也是有的行,有的不行。如果你知道的話,請回復(fù)給我,謝謝了。doingjava@126.com 期待ing

          # re: extjs 面向?qū)ο髮嵺`  回復(fù)  更多評論   

          2009-07-17 23:48 by 月下孤城
          @Gavin.lee
          這個我到?jīng)]注意,寫隨筆的時候我就是按照系統(tǒng)默認的編輯器寫的啊,沒有其他特別的設(shè)置。

          # re: extjs 面向?qū)ο髮嵺`  回復(fù)  更多評論   

          2009-07-18 11:06 by 凡客誠品
          不錯 來看看

          # re: extjs 面向?qū)ο髮嵺`  回復(fù)  更多評論   

          2009-07-18 22:44 by Gavin.lee
          呵,我找到原因了,是我勾選了 enable comments,不過這個應(yīng)該不管頁面保存的事吧,不知道算不算bug。

          # re: extjs 面向?qū)ο髮嵺`  回復(fù)  更多評論   

          2009-07-19 17:43 by 乾為天|天豬
          createDelegate(this) 沒必要.
          加個scope:this

          # re: extjs 面向?qū)ο髮嵺`  回復(fù)  更多評論   

          2009-07-19 21:05 by eagle--daiq
          @乾為天|天豬
          多謝這位兄弟,這種方式不錯,代碼也更簡潔些。

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 洪湖市| 古交市| 德钦县| 梅河口市| 东宁县| 四川省| 泸西县| 奉贤区| 古蔺县| 青海省| 盐边县| 桑植县| 大埔区| 积石山| 江津市| 方城县| 晋宁县| 犍为县| 福安市| 寻乌县| 醴陵市| 随州市| 奉新县| 祁连县| 错那县| 平湖市| 响水县| 灵丘县| 青神县| 桦甸市| 余庆县| 曲沃县| 白玉县| 鄂温| 北海市| 张掖市| 福鼎市| 湘潭市| 涟源市| 嘉黎县| 阿克陶县|