ExtJs - 动态更改Textfield VType

时间:2014-03-19 22:10:33

标签: javascript extjs extjs4

一个相当直截了当的问题。在任何地方都找不到答案。

使用ExtJs 4.2

我有两个自定义VType和一个文本字段。我想在用户点击单选按钮时更改该textfield的vtype。

我知道文本字段已经创建,所以这样做:

textfield.vtype = 'otherType';

不会为我做。也不会:

Ext.apply(textField,{vtype:'otherType'});  

所以显而易见的事情就出来了。现在我正在玩弄破坏并重新创造它,但是(如果它甚至有效)似乎有点矫枉过正。

3 个答案:

答案 0 :(得分:2)

其他答案没有考虑到maskRe也需要改变。为什么?如果您只是应用新的vtype,则验证将根据新的vtype进行,但您允许键入的字符不会随新的vtype一起更改。

这是完整的解决方案。

textfield.vtype = 'otherType';
textfield.validate();
textfield.maskRe = Ext.form.field.VTypes[textfield.vtype + 'Mask'];

如果您想了解原因,请查看最初设置maskRe的来源:http://docs.sencha.com/extjs/4.2.1/source/Text2.html#Ext-form-field-Text-method-initEvents

这是一个覆盖,允许您在任何文本字段上调用setVType。

Ext.define('Ext.overrides.form.field.Text', {
    override: 'Ext.form.field.Text',

    /**
     * Changes the vtype, adjusts the maskRe
     * and revalidates unless withValidate is false.
     */
    setVType: function(newVtype, withValidate) {
        var me = this;

        me.vtype = newVtype;
        if (withValidate !== false) {
            me.validate();
        }
        me.maskRe = Ext.form.field.VTypes[me.vtype + 'Mask'];    
    }
});

答案 1 :(得分:1)

使用Ext.apply为我工作,在这里摆弄:https://fiddle.sencha.com/#fiddle/4d4

希望这会有所帮助..

答案 2 :(得分:0)

使用Ext.apply和validate()为我工作,在这里摆弄:https://fiddle.sencha.com/#fiddle/10mp

用于没有明确字段的验证:

Ext.apply(textField,{vtype:'otherType'});
textField.validate();