我有一个扩展Ext.form.TextField
的自定义文本字段(ExtJs 3.1.1)。我已覆盖getValue
以提交计算值而不是超类中的原始值。直接调用getValue
时,返回值是正确的。但是,在提交父表单时,根本没有调用getValue
(getValue
方法中的调试消息不会出现在控制台中)。如何覆盖表单提交时返回的值? getValue
不是要覆盖的正确方法吗?
这是类的总体布局(我无法提供实际代码):
MyField = Ext.extend(Ext.form.Textfield, {
constructor: function(config) {
[initialize some basic variables....]
MyField.superclass.constructor.call(this, config);
},
initComponent : function() {
this.on('keypress', this.handler, this);
},
handler : function(field, event, args) {
[set an internal value this.myValue based on superclass value]
},
getValue : function () {return this.myValue;}
});
以上在计算myValue
方面工作正常,并在调用getValue
时返回。但是,当在表单中添加时,将返回Ext.form.TextField
中的值,并且我还注意到在父FormPanel对象上调用MyField.getValue
时根本没有调用FormPanel.getForm().submit()
答案 0 :(得分:2)
我不认为你可以在不超越更多行为的情况下实现你想要做的事情。
如果您调试了提交操作,则会在Ext.form.Action.Submit
中看到以下内容:
Ext.Ajax.request(Ext.apply(this.createCallback(o), {
form:this.form.el.dom,
url:this.getUrl(isGet),
method: method,
headers: o.headers,
params:!isGet ? this.getParams() : null,
isUpload: this.form.fileUpload
}));
请注意,它会传递实际的表单DOM元素(即this.form.el.dom
),其中包含您字段的实际值,而不是您的计算值。
如果您继续调试,则会在Ext.Ajax.request
的调用中看到form
参数通过Ext.lib.Ajax.serializeForm(form)
序列化。生成的序列化值将作为Ext.lib.Ajax.request
参数传递到data
。该值是实际发送到服务器的值。