ExtJS ComboBox验证返回意外结果

时间:2013-08-20 15:27:36

标签: javascript validation extjs string

我刚刚开始使用ExtJS脚本而且我有一个具有

的ComboBox
allowBlank = false

forceSelection = true

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

Please select...

且无价值

''

当我在ComboBox上运行验证时,我得到 true 不明白为什么?

时的文件
allowBlank = false

强制验证以检查value.length> 0 所以我在JS Console中完成了自己的测试

>> 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 所以我认为它可能是验证方法中的一个错误,所以我尝试了这个

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

得到了这个结果 true

任何人都对我可能做错的事情有任何想法,或者如果需要设置任何其他内容以使此验证在值为'时返回false。

PS。我也试过这个

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

并获得正确的结果 false 。这让我非常困惑,因为我通常期望''和''在验证中返回相同的值。

我知道解决方法是将我的价值设定为'',但我宁愿让它与''合作。

由于

2 个答案:

答案 0 :(得分:2)

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

基本上,Ext.form.field.Text的后代有一个'validator'配置选项,它允许程序员为组件指定自定义验证函数(参见here)。

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

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

validator: function (value) {
  return (value === '/*Your emptytext text*/') ? "blankText" : true;
}

答案 1 :(得分: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;
}

所以,如果该值等于空文本,则返回值为''