Ext.FormPanel 4

第四行的兩個輸入框主要是測試通過 vtypes 屬性來驗證輸入框的輸入的:

{

            columnWidth:.5,

            layout: 'form',

            border:false,

            items: [{

                xtype:'textfield',

                fieldLabel: ' 電子郵件 ',

                name: 'email',

                vtype:'email',

                allowBlank:false,

                anchor:'90%'

            }]

        },{

            columnWidth:.5,

            layout: 'form',

            border:false,

            items: [{

                xtype:'textfield',

                fieldLabel: ' 個人主頁 ',

                name: 'url',

                vtype:'url',

                anchor:'90%'

            }]

         }]

    }

這裏的定義和普通的文本輸入框沒什麼區別,只是多了一個 vtypes 的屬性定義。 Vtypes 裏總共定義了 email url alpha alphanum 四種類型數據格式, email url 這個不用介紹了,呵呵。 alpha 是字母和下劃線的組合, alphanum 是字母、下劃線和數字的組合。

下面要加入一個 tabpanel ,加入 3 tab 頁。

{

        xtype:'tabpanel',

        plain:true,

        activeTab: 0,

         height:235,

        defaults:{bodyStyle:'padding:10px'},

        items:[]

}

要注意的是,這個 tabpanel 不是在上面 coulmn items 里加的,因爲不在 column 裏。我們加在 formpanel 裏。把 item 類型設置爲 'tabpanel' 就行了,然後將標籤頁頭的背景設置爲透明的( plain:true ),當前活動 的標籤頁是第一頁( activeTab: 0 ),高度設置爲 235px height:235 ), tab 頁的面板使用內補丁 10px defaults:{bodyStyle:'padding:10px'} )。

好了,現在在 tabpanel items 加入標籤頁。第一頁主要有兩個輸入控件,一個是 vtypes 類型 alphanum 的登錄輸入框和一個密碼輸入框。

{

            title:' 登錄信息 ',

            layout:'form',

            defaults: {width: 230},

            defaultType: 'textfield',

 

             items: [{

                fieldLabel: ' 登錄名 ',

                name: 'loginID',

                allowBlank:false,

                vtype:'alphanum',

                allowBlank:false

            },{

                          inputType:'password',

                 fieldLabel: ' 密碼 ',

                name: 'password',

                allowBlank:false

            }]

        }

在標籤定義了,設置了標籤標題是登錄信息( title:' 登錄信息 ' ),控件容器是 formlayout layout:'form' ),控件的默認寬度是 230px defaults: {width: 230} ),默認控件類型是 textfield defaultType: 'textfield' )。

兩個控件的定義與前面的 textfield 定義沒什麼區別,只是密碼輸入框需要定義 input 控件的類型爲 password inputType:'password' )。兩個控件都不允許爲空( allowBlank:false )。

第二個標籤頁裏有 numberfield timefield textfield 三個控件:

{

            title:' 數字時間字母 ',

            layout:'form',

            defaults: {width: 230},

             defaultType: 'textfield',

 

            items: [{

                   xtype:'numberfield',

                fieldLabel: ' 數字 ',

                name: 'number'

            },{

                  xtype:'timefield',

                fieldLabel: ' 時間 ',

                 name: 'time'

            },{

                fieldLabel: ' 純字母 ',

                name: 'char',

                vtype:'alpha'

            }]

        }

Numberfield 顧名思義就是隻能輸入數字的輸入控件。在該例子,沒做最大值、最小值任何限制,如果要設置最大值和最小值,分別設置 maxValue minValue 兩個屬性就行了。如果要設置數字輸入長度,例如身份證號碼,可以設置 maxLength minLength 兩個屬性。可以通過設置 maxText minText maxLengthText minLengthText 設置各自的驗證出錯信息。可通過 allowDecimals 屬性設置是否只允許輸入整型值,默認值是 true ,允許輸入浮點數。設置 allowNegative 設置是否只允許輸入正數,默認值是 true ,允許輸入正負數。通過 decimalPrecision 屬性可設置小數點後的位數,默認值是 2 位。

timefield 是新增加的時間輸入控件,起彌補日期輸入控件不能輸入時間的作用。它的定義也很簡單,設置類型爲 timefield 就行了。 timefield 默認時間格式是 12 小時制的,我們可通過修改 format 屬性來修改其數據格式。通過設置 increment 屬性可設置下拉選擇值得時間區間,默認值是 15 分鐘的。還可以和數字輸入控件一樣設置最大值和最小值。下拉的設置和 combobox 是一樣的。

在目前的版本中, timefield 類還沒有漢化,所以我們要在本地文件中加入 timefield 的漢化定義:

if(Ext .form.TimeField){

   Ext.apply(Ext.form.TimeField.prototype, {

     format:'G:i:s',

     minText : " 該輸入項的時間必須大於或等於: {0}",

     maxText : " 該輸入項的時間必須小於或等於: {0}",

     invalidText : "{0} 不是有效的時間 ",

       });

}

在這裏,我默認定義了時間格式是 24 小時制的,小時爲個位數是不加前綴 0

最後一個加入的是測試純字母輸入的,和 email 等是一樣的,我就不介紹了。

在最後一個 tab 頁中加入了一個 textarea 輸入

{

            title:' 文本區域 ',

            layout:'fit',

            items: {

                xtype:'textarea',

                id:'area',

                fieldLabel:''

            }

        }

最後一步就是爲 form 添加按鈕了,在 formpanel buttons 屬性中我們加入了一個保存按鈕和取消按鈕:

buttons: [{

        text: ' 保存 ',

        handler:function(){

               if(simpleForm.form.isValid()){

               this.disabled=true;

                      simpleForm.form.doAction('submit',{

                                                 url:'test.asp',

                                                 method:'post',

                                                 params:'',

                                                 success:function(form,action){

                                                        Ext.Msg.alert(' 操作 ',action.result.data);                                                        this.disabled=false;

                                                 },

                                       failure:function(){

                                      Ext.Msg.alert(' 操作 ',' 保存失敗! ');

                                                        this.disabled=false;

                                                 }

                      });

               }

        }           

    },{

        text: ' 取消 ',

        handler:function(){simpleForm.form.reset();}

    }]

formpanel 類中, form 屬性指向的是 formpanle 裏的 basicform 對象 ,我們可通過 formpanle.form 來使用該 basicform 對象。在被例子,我們已經將 formpanel 對象賦值給了 simpleForm 這個變量,所以我們可以通過 simpleForm.form 訪問面板裏的 basicform 對象。

buttons 裏定義的按鈕默認是 Ext.Button ,所以按鈕的屬性定義可以查看 Ext.Button API 。在這裏兩個按鈕都沒用到其它屬性,只是設置了顯示文本( text )和單擊事件。

保存按鈕要做的就是先做 basicform 的客戶端驗證( simpleForm.form.isValid() ),驗證通過了則設置該按鈕狀態爲 disable ,防止 2 次提交。然後調用 simpleForm.form.doAction 方法 提交數據。 doAction 方法的第一個參數“ submit ”的意思是表示執行的是提交操作,提交的後臺頁面是 test.asp url:'test.asp' ),提交方式是 post method:'post' ),沒有其它提交參數( params:'' ),提交成功後執行 success 定義的函數,本例只是顯示一個保存成功信息。後臺返回的數據格式是需要我們注意的,一定要json格式,而且必須包含“ success:true”,不然不會執行 success定義的函數。 success 定義的函數返回兩個參數,第一是 form 本身,第二個是 ajax 返回的響應結果,在 action.result 這個 json 數組了保存了後臺返回的數據。例如本例後臺返回的 json 結構是“ {success:true,data:~~~} ”,其中 data 部分我將提交的數據將字段名和數據組合成一個字符串。在 success 函數中,我通過“ Ext.Msg.alert(' 操作 ',action.result.data); ”將 data 數據顯示出來。我們還定義 failure 函數,就是網絡通訊存在問題的時候將顯示錯誤信息。

取消按鈕就是簡單的 reset 一下 form 的控件。

如果想 form 按以前的老辦法提交,可以在 formpanel 的定義中加入一下設置:

 

onSubmit: Ext.emptyFn,

       
submit: function() {


        
this.getEl().dom.submit();


}

第一個設置的目的是取消 formpanel 的默認提交函數。第二就是設置新的提交方式爲舊方式提交。

至此,我們已經簡單的學習 一次 2.0 版中的 form 控件,希望大家能從中獲得收益。如果有什麼疑問和建議,請聯繫我。多謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章