ExtJS3.2 TextField가 비활성화되도록 허용하는 문제

5012 단어 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;
         }
    }

버그 코드 수정:
//  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;
      }
    });
 

좋은 웹페이지 즐겨찾기