0

我一直在研究 ExtJS 脚本,我有一个 ComboBox

allowBlank = false

forceSelection = true

我在列表中有一个作为默认消息的项目,它有一个显示文本

Please select...

并且没有价值

''

当我在 ComboBox 上运行验证时,我得到了true 不知道为什么?根据文档,当

allowBlank = false

验证被强制检查 value.length > 0 所以我在 JS 控制台中做了我自己的测试

>> if (thisForm.controlManager.controlArray[2].allowBlanks) { if (thisForm.controlManager.controlArray[2].length >= 0) { true; } false; } else { if (thisForm.controlManager.controlArray[2].length > 0) { true; } false; } 

它返回false 所以我认为这可能是 validate 方法中的一个错误,所以我尝试这样做

>> thisForm.controlManager.controlArray[2].validateValue('') 

结果是真的

任何人都知道我可能做错了什么,或者是否需要设置其他任何内容以使此验证在值为“”时返回 false。

PS。我也试过这个

>> thisForm.controlManager.controlArray[2].validateValue(' ') 

并得到了错误的正确结果。这让我很困惑,因为我通常期望 '' 和 ' ' 在验证中返回相同的值。

我知道一种解决方法是将我的值设置为'',但我宁愿让它与''一起使用。

谢谢

4

2 回答 2

2

我碰巧最终遇到了同样的问题,经过一番环顾后,设法找到了一个不需要覆盖 Extjs 标准功能的解决方案。

基本上,Ext.form.field.Text 的后代有一个“验证器”配置选项,它允许程序员为组件指定自定义验证功能(参见此处)。

基本上,您的验证器函数在 getErrors() 开始时被调用,并在字段的其余标准验证之前进行评估。验证器函数接受一个参数(值),如果值有效则必须返回 true,否则必须返回错误消息字符串。

以下配置最终适用于我的案例:

validator: function (value) {
  return (value === '/*Your emptytext text*/') ? "blankText" : true;
}
于 2015-05-29T02:51:18.333 回答
1

你必须使用 emptyText 配置 Ext 有这个代码来验证字段:

validate : function(){
    if(this.disabled || this.validateValue(this.processValue(this.getRawValue()))){
        this.clearInvalid();
        return true;
    }
    return false;
}

getRawValue 的定义如下:

getRawValue : function(){
    var v = this.rendered ? this.el.getValue() : Ext.value(this.value, '');
    if(v === this.emptyText){
        v = '';
    }
    return v;
}

因此,如果该值等于空文本,则返回值为 ''

于 2013-08-20T15:43:34.827 回答