2011-07-14 72 views
3

我有一個像下面ExtJS的NumberField驗證

{ 
    xtype: 'compositefield' 
    ,hideLabel: true 
    ,labelWidth: 100 
    ,items: [ 
     { 
      xtype: 'displayfield' 
      ,width: 160 
      ,value: 'field 1' 
     }, 
     { 
      xtype: 'checkbox', 
      name: 'field1name', 
      id: 'field1id', 
      checked: true 
     }, 
     { 
      xtype: 'displayfield' 
      ,width: 20 
      ,value: 'Ft ' 
     }, 
     { 
      xtype: 'numberfield', 
      width: 50, 
      allowNegative: false, 
      value: 50, 
      name: 'numberfield'  
     } 
    ] 
} 

我怎麼能爲xtype:'numberField'定義驗證的複合元素?

我不想把配置選項allowBlank:false,但相反,我想驗證它在別的地方,但在字段的一側顯示錯誤消息。

誰能請向我解釋如何做到這一點?

下面是我正在做它,產生「無效的方法」錯誤的螢火:

Ext.get('numberfield').setActiveError('this Field Cannot be Blank'); 

Ext.get('numberfield').markInvalid('this Field Cannot be Blank'); 
+0

如果你只是想驗證它是否具有內部值,你應該使用'allowBlank:FALSE'。如果你想要一個自定義消息,你只需要指定'blankText:'自定義文本''。 對於真正定製的驗證中,在[驗證](http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.form.field.Number-cfg-validator)配置。 – MarthyM

回答

6

我認爲,最簡單的就是使用驗證功能:

{ 
    xtype: 'compositefield' 
    ,hideLabel: true 
    ,labelWidth: 100 
    ,monitorValid: true 
    ,items: [ 
     [...] 
     { 
      xtype: 'numberfield', 
      width: 50, 
      allowNegative: false, 
      value: 50, 
      name: 'numberfield', 
      validator: function(val) { 
       if (!Ext.isEmpty(val)) { 
        return true; 
       } 
       else { 
        return "Value cannot be empty"; 
       } 
      } 
     } 
    ] 
} 
+0

你能告訴我如何運行驗證器嗎?謝謝。我想根據表單中某些其他字段的選擇來驗證此字段。所以這個驗證器會在我提交表單後立即運行。 –

+1

您不需要顯式調用它,如果在FormPanel配置中使用'monitorValid:true',它將自動調用。 – tsg

+1

我編輯了答案,告訴你需要添加的地方。 – tsg

2

在Extjs4,您可以設置allowBlankfalse防止EMP財產ty數字字段條目。

還有一個minLength設置來限制必須輸入的字符數。