`
simen_net
  • 浏览: 306273 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ExtJS3.2 TextField允许为空失效的问题

EXT 
阅读更多

升级到ExtJS3.2之后vtype=email或者其他的TextField在allowBlank : true的情况下提示“邮件格式错误”,查看源代码发现:

3.2中代码片段

getErrors: function(value) {
    var errors = Ext.form.TextField.superclass.getErrors.apply(this, arguments);
    
    value = value || this.processValue(this.getRawValue());        
    
    if(Ext.isFunction(this.validator)){
        var msg = this.validator(value);
        if (msg !== true) {
            errors.push(msg);
        }
    }
    
    if (!this.allowBlank && (value.length < 1 || value === this.emptyText)) { // if it's blank
        errors.push(this.blankText);
    }
    
    if (value.length < this.minLength) {
        errors.push(String.format(this.minLengthText, this.minLength));
    }
    
    if (value.length > this.maxLength) {
        errors.push(String.format(this.maxLengthText, this.maxLength));
    }
    if (this.vtype) {
        var vt = Ext.form.VTypes;
    alert(vt[this.vtype](value, this));
        if(!vt[this.vtype](value, this)){
            errors.push(this.vtypeText || vt[this.vtype +'Text']);
        }
    }

    if (this.regex && !this.regex.test(value)) {
        errors.push(this.regexText);
    }
    
    return errors;
},

 对比3.1中代码片段

validateValue : function(value){
    if(Ext.isFunction(this.validator)){
        var msg = this.validator(value);
        if(msg !== true){
            this.markInvalid(msg);
            return false;
        }
    }
    if(value.length < 1 || value === this.emptyText){ 
         if(this.allowBlank){
             this.clearInvalid();
             return true;
         }else{
             this.markInvalid(this.blankText);
             return false;
         }
    }
    if(value.length < this.minLength){
        this.markInvalid(String.format(this.minLengthText, this.minLength));
        return false;
    }
    if(value.length > this.maxLength){
        this.markInvalid(String.format(this.maxLengthText, this.maxLength));
        return false;
    } 
    if(this.vtype){
        var vt = Ext.form.VTypes;
        if(!vt[this.vtype](value, this)){
            this.markInvalid(this.vtypeText || vt[this.vtype +'Text']);
            return false;
        }
    }
    if(this.regex && !this.regex.test(value)){
        this.markInvalid(this.regexText);
        return false;
    }
    return true;
},

 可见3.2中对代码效率和错误处理作了一些调整,不过这个改动也确实太大了一些,不知道是不是考虑到效率对比发现了问题的所在:

//3.2中的代码 显然这里在allowBlank之后并没有返回true而是放任下面的代码继续 貌似这个不符合逻辑
 if (!this.allowBlank && (value.length < 1 || value === this.emptyText)) {
        errors.push(this.blankText);
    }
//3.1中的代码
    if(value.length < 1 || value === this.emptyText){ 
         if(this.allowBlank){
             this.clearInvalid();
             return true;
         }else{
             this.markInvalid(this.blankText);
             return false;
         }
    }

修复Bug代码:

// 修复ExtJS3.2中TextField allowBlank : true 失效的Bug
Ext.override(Ext.form.TextField, {
      getErrors : function(value) {
        var errors = Ext.form.TextField.superclass.getErrors.apply(this, arguments);

        value = value || this.processValue(this.getRawValue());

        if (Ext.isFunction(this.validator)) {
          var msg = this.validator(value);
          if (msg !== true) {
            errors.push(msg);
          }
        }

        if (value.length < 1 || value === this.emptyText) {
          if (this.allowBlank) {
            this.clearInvalid();
            return true;
          } else {
            errors.push(this.blankText);
          }
        }

        if (value.length < this.minLength) {
          errors.push(String.format(this.minLengthText, this.minLength));
        }

        if (value.length > this.maxLength) {
          errors.push(String.format(this.maxLengthText, this.maxLength));
        }
        if (this.vtype) {
          var vt = Ext.form.VTypes;
          if (!vt[this.vtype](value, this)) {
            errors.push(this.vtypeText || vt[this.vtype + 'Text']);
          }
        }

        if (this.regex && !this.regex.test(value)) {
          errors.push(this.regexText);
        }

        return errors;
      }
    });
 

 

分享到:
评论

相关推荐

    ExtJS3.2正式版

    ExtJS3.2正式版 货真价实 ExtJS3.2正式版

    extjs3.2资源压缩包

    4. **AJAX支持**:ExtJS 3.2具有强大的AJAX功能,允许开发者异步与服务器进行数据交换,实现无刷新页面更新,提高用户体验。 5. **可配置和可扩展性**:每个组件都有丰富的配置选项,可以定制组件的行为和外观。...

    ExtJs3.2官方原版

    总的来说,“ExtJs3.2官方原版”为开发人员提供了一个强大而全面的框架,用于构建具有专业级特性的Web应用。尽管对于初学者来说,英文文档可能是一道门槛,但通过学习和实践,可以充分利用这个库的潜力,创建出功能...

    ExtJs3.2+中文API

    ExtJs3.2+中文API 便于开发查找API 很方便

    ExtJS3.2列布局

    在使用ExtJS3.2的列布局时,你需要创建一个容器(如Panel),然后设置其`layout`属性为`column`。接下来,你可以通过添加子组件(items)来定义每列的内容。每个子组件都可以有自己的宽度,通过`width`属性来指定。...

    Extjs3.2中文帮助手册

    这个"Extjs3.2中文帮助手册"是开发人员在使用ExtJS 3.2时的重要参考资料,它包含了详细的API文档、示例代码和使用指南,使得开发者能够更方便地理解和应用这个框架。 手册中的知识点主要包括以下几个方面: 1. **...

    extjs3.2api中文

    "extjs3.2api中文"标题表明这是一个中文版的ExtJS 3.2 API文档,对于中文开发者来说,能够更方便地理解和使用这个框架。 "BLANK_IMAGE_URL"是ExtJS中的一个常量,它通常被用作一个占位符图像的URL。这个1×1像素的...

    安装Extjs的插件spket,extjs3.2版.doc

    ExtJS 3.2通常包含一个名为`ext.jsb`的文件,这个文件是Spket识别ExtJS库的关键。接下来,按照以下步骤安装Spket插件: 1. **以Eclipse插件形式安装**: - 打开Eclipse,通过菜单栏依次选择`Help` -&gt; `Software ...

    ExtJS 3.2 聊天室程序(类Q_Q群)

    ExtJS 3.2 聊天室程序(类Q_Q群)

    ExtJs 3.2 中文API帮助文档

    ExtJS是一种主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。功能丰富,无人能出其右。无论是界面之美,还是功能之强,ext的表格控件都... ExtJs 3.2 中文API帮助文档,CHM离线的,希望对大家有帮助

    ExtJS3.2的各种例子

    我收集了各种ExtJS的例子,有3.2还有2.5,还有所有“掏钱学ExtJS”的例子,绝对物超所值。

    extjs3.2 中文API 完整版

    网络上流传很多exjs 中文API,都神马东西,下载都没用。现在鄙人从脚本娃娃群分享的完整API上传分享给大家!

    EXTJS3.2-3.3中文API和包

    EXTJS 3.2-3.3版本是EXTJS框架的一个重要阶段,它提供了大量的组件、布局、数据绑定和事件处理机制,为开发者带来了强大的功能和灵活性。 EXTJS 3.2-3.3中文API文档是学习和开发EXTJS应用的重要参考资料。CHM...

    ExtJS3.2中文API与示例

    Ext3.2中文API及代码示例,经典的API翻译,丰富的代码示例 就在这里等着你下!

    ExtJS3.2资源包

    ExtJs3.2的资源包,需要的朋友可以下载

    Eclipse安装Extjs3.2的spket插件(附插件和Ext文件)

    在本文中,我们将详细介绍如何在Eclipse环境中安装适用于ExtJS 3.2的Spket插件,以便于JavaScript开发和代码提示。首先,让我们了解一下Eclipse、ExtJS和Spket这三个关键概念。 Eclipse是一款开源的集成开发环境...

    Learning ExtJS 3.2.pdf

    Learning ExtJS 3.2.pdf绝对的高清,不过是英文的,下载之前考虑好,不想骗你们的分,呵呵

    extjs3.2中文API文档

    这是一个extjs3.2的中文API文档,可以用于学习。

    ExtJS 3.2 聊天室程序(类QQ群)

    技术:ExtJS 3.2 DWR 3.0 Struts 2.16 Spring 2.0 Hibernate 3.2 MySql 5.0 原文地址: http://yourgame.javaeye.com/blog/681537 火狐浏览器,谷歌浏览器测试通过. 讨论Q_群:91986229(群3) 76202406(群2) 62150370...

    extjs最新版 3.2版本

    EXTJS 3.2版本是EXTJS发展过程中的一个关键节点,它提供了一套全面的UI解决方案,为开发者构建功能强大、用户体验良好的Web应用奠定了基础。通过深入理解和熟练运用EXTJS 3.2,开发者可以有效地提升工作效率,创造出...

Global site tag (gtag.js) - Google Analytics