ExtJS ComboBox验证返回意外结果

ExtJS ComboBox validation returns unexpected result

本文关键字:意外 结果 返回 验证 ComboBox ExtJS      更新时间:2023-09-26

我刚刚在编写ExtJS脚本,我有一个ComboBox,它有

allowBlank = false

forceSelection = true

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

Please select...

无值

''

当我在组合框上运行validate时,我得到true不知道为什么?根据时的文件

allowBlank = false

验证被强制检查值。长度>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所以我认为这可能是验证方法中的一个错误,所以我尝试做这个

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

并因此得到true

任何人都知道我可能做错了什么,或者是否需要设置其他任何东西来让这个validate在值为"时返回false。

PS。我也试过这个

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

并得到了正确的结果,即false。这让我非常困惑,因为我通常希望"answers"在验证中返回相同的值。

我知道一个变通方法是将我的值设置为",但我宁愿使用"。

感谢

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

基本上,Ext.form.field.Text的子代有一个"validator"配置选项,允许程序员为组件指定自定义验证函数(请参阅此处)。

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

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

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

您必须使用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;
}

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