<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    eagle

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

    extjs 面向對象實踐

    Posted on 2009-07-17 23:31 月下孤城 閱讀(2382) 評論(6)  編輯  收藏 所屬分類: extjs
    近期一個項目前臺采用了extjs框架,經過一段時間的編碼,對extjs面向對象也有了一定的了解。以下通過FormPanel擴展對表單對象中常用代碼段進行了通用提取,并以此實踐ext面向對象的繼承,希望對剛接觸的朋友有所幫助。

    1.實現類構造方法:
     1/*
     2 * 默認表單類
     3 * add by daiqiang
     4 * */

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

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

    2.使用Ext.extend方式實現父類方法、屬性的繼承擴展.
     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                               //執行回調函數
    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("錯誤""提交的表單數據無效,請檢查!");
    35                                    break;
    36                                case Ext.form.Action.CONNECT_FAILURE:
    37//                                    Ext.Msg.alert("Failure", "Ajax communication failed");
    38                                    Ext.Msg.alert("錯誤""服務器連接失敗,請稍后再試!");
    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] ),參數分別對應'子類對象','父類對象','覆蓋擴展父類方法屬性'。
    2-8行是對FormPanel的默認設置。接下來就是對ext 組件方法initComponent的覆蓋實現(了解ext組件生命周期詳情點這里),該方法中主要實現默認的提交、重置
    按鈕操作。注意在29行代碼success屬性方法后加了個createDelegate(this)方法,這主要是success方法中引用了類屬性this.subBtnCallbackFun,而success方法中的scope(域)
    和當前類的scope不同,故通過Function類中的 createDelegate轉化到當前域中。處理完自定義操作后別望了回調父類該方法,完成FormPanel的初始化工作。

    3.調用代碼片段
     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('回調方法');
     6                    }

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



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

    評論

    # re: extjs 面向對象實踐  回復  更多評論   

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

    # re: extjs 面向對象實踐  回復  更多評論   

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

    # re: extjs 面向對象實踐  回復  更多評論   

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

    # re: extjs 面向對象實踐  回復  更多評論   

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

    # re: extjs 面向對象實踐  回復  更多評論   

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

    # re: extjs 面向對象實踐  回復  更多評論   

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

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


    網站導航:
     
    主站蜘蛛池模板: 一个人免费观看视频在线中文| 嫩草在线视频www免费看| 亚洲国产一成久久精品国产成人综合| 成年大片免费高清在线看黄| 亚洲AV日韩AV天堂一区二区三区| 97在线线免费观看视频在线观看| 理论秋霞在线看免费| 亚洲国产一区国产亚洲| 成人永久免费福利视频网站| 久操免费在线观看| 日韩国产欧美亚洲v片 | 亚洲熟妇无码乱子AV电影| 人与禽交免费网站视频| 新最免费影视大全在线播放| 亚洲国产模特在线播放| 亚洲爽爽一区二区三区| 中文字幕无码成人免费视频| 国产成人无码精品久久久免费| 国产日本亚洲一区二区三区| 亚洲精品无码国产| 国产精品无码一二区免费| 95免费观看体验区视频| 四虎影视久久久免费观看| 亚洲av永久无码精品三区在线4| 精品国产亚洲男女在线线电影 | 日韩电影免费在线观看视频| 男女午夜24式免费视频| 国产av无码专区亚洲av毛片搜| 亚洲精品日韩专区silk| 亚洲最大激情中文字幕| 国产亚洲福利一区二区免费看| 84pao强力永久免费高清| 久久久久久国产a免费观看不卡| 亚洲精品久久无码av片俺去也| 亚洲综合网美国十次| 亚洲一区精品无码| 亚洲国产精品综合久久网络 | 日韩精品免费一区二区三区| 亚洲人成免费网站| 免费A级毛片无码视频| a视频免费在线观看|