如何创建在Mask中显示两个值的表单域?

时间:2013-06-20 11:40:49

标签: extjs extjs4 extjs4.1 extjs4.2

我需要一种文本字段,允许我应用一个

的掩码
  1. 过滤输入
  2. 应用一些默认文字
  3. 以下是输入

    时应该是什么样子的示例

    enter image description here

    并且在场地模糊之后

    enter image description here

    两个值都需要存储在单独的属性中,而整个字段需要使用对象设置并需要返回一个。我已经开始工作了一个字段,我可以用一个对象设置并返回一个但我不知道如何应用一个掩码。

    感谢任何帮助或建议!

    编辑:

    这是我到目前为止所得到的:Example

    Ext.define('Ext.ux.form.Field', {
        extend: 'Ext.form.field.Base',
        alias: 'widget.maskfield',
    
        initComponent: function() {
          this.callParent(arguments);
        },
        setValue: function(value) {
            var me = this;
            me.setRawValue(me.valueToRaw(value));
            return me.mixins.field.setValue.call(me, value);
        },
        valueToRaw: function(value) {
            var empty = {},
                me = this,
                len = this.properties.length,
                i = 0;
            for(;i<len;i++) {
                var prop = this.properties[i];
                empty[prop] = this.value ? this.value[prop] || 0 : 0;
            }
    
            return Ext.value(value, empty);
        },
        transformRawValue: function(value) {
            var v = this.getValue(),
                s = v.split(',');
            return s[0] + 'J' + s[1] + 'M';
        },
        setRawValue: function(value) {
            var me = this,
                value = Ext.value(me.transformRawValue(value), '');
            me.rawValue = value;
    
            // Some Field subclasses may not render an inputEl
            if (me.inputEl) {
                me.inputEl.dom.value = value;
            }
            return value;
        },
        getValue: function() {
            var me = this,
                len = this.properties.length,
                i = 0,
                value = '';
            for(;i<len;i++) {
                if(!this.value)
                    value = '';
                else if (!value)
                    value = this.value[this.properties[i]];
                else
                    value += ','+this.value[this.properties[i]];
            }
            return value        
        },
        // should overwrite the mixin
        isEqual: function(obj1,obj2) {
          var me = this,
              p;
          for(p in obj1) {
              if(typeof(obj2[p])=='undefined') {return false;}
          }
    
          for(p in obj1) {
              var prop;
              if (prop = obj1[p]) {
                  switch(typeof(prop)) {
                      case 'object':
                          if (!me.equals(prop, obj2[p])) { return false; }
                          break;
                      case 'function':
                          return false;
                          break;
                      default:
                          if (prop != obj2[p]) { return false; }
                  }
              } else {
                  if (obj2[p])
                      return false;
              }
          }
    
          for(p in obj2) {
              if(typeof(obj1[p])=='undefined') {return false;}
          }
    
          return true;
        }
    
    });
    

0 个答案:

没有答案