一个相当直截了当的问题。在任何地方都找不到答案。
使用ExtJs 4.2
我有两个自定义VType和一个文本字段。我想在用户点击单选按钮时更改该textfield的vtype。
我知道文本字段已经创建,所以这样做:
textfield.vtype = 'otherType';
不会为我做。也不会:
Ext.apply(textField,{vtype:'otherType'});
所以显而易见的事情就出来了。现在我正在玩弄破坏并重新创造它,但是(如果它甚至有效)似乎有点矫枉过正。
答案 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();