2011-07-14 47 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设置来限制必须输入的字符数。