Javascript ExtJs,自定义文本字段';提交表单时未调用s getValue()函数

Javascript ExtJs,自定义文本字段';提交表单时未调用s getValue()函数,javascript,forms,extjs,extjs3,Javascript,Forms,Extjs,Extjs3,我有一个自定义文本字段,它扩展了Ext.form.TextField(extjs3.1.1)。我已经重写了getValue,以提交一个计算值,而不是超类中的原始值。直接调用getValue时,返回值是正确的。但是,在提交父窗体时,根本不会调用getValue(控制台中不会出现getValue方法中的调试消息)。提交表单时,如何重写返回的值?getValue不是覆盖的正确方法吗 下面是该课程的总体布局(我无法提供实际代码): 在计算myValue并在调用getValue时返回它方面,上面的方法工作

我有一个自定义文本字段,它扩展了
Ext.form.TextField
(extjs3.1.1)。我已经重写了
getValue
,以提交一个计算值,而不是超类中的原始值。直接调用
getValue
时,返回值是正确的。但是,在提交父窗体时,根本不会调用
getValue
(控制台中不会出现
getValue
方法中的调试消息)。提交表单时,如何重写返回的值?
getValue
不是覆盖的正确方法吗

下面是该课程的总体布局(我无法提供实际代码):


在计算
myValue
并在调用
getValue
时返回它方面,上面的方法工作得很好。但是,当添加到表单中时,会返回
Ext.form.TextField
中的值,我还注意到
MyField.getValue
FormPanel.getForm().submit()时根本不会被调用
在父FormPanel对象上被调用。

我认为如果不重写更多的行为,就无法实现您想要做的事情

如果调试到submit操作中,您将在
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
。该值就是实际发送到服务器的值。

您能提供您的代码的exmaple吗?我无法共享代码,但我将添加一个示例,说明我试图做的事情ExtJS 3.4具有submitValue属性,请尝试此操作,将submitValue:true添加到组件的配置中。不幸的是,我在sencha documentationsubmitValue中没有找到这个版本(3.1),默认值为true。字段正在提交这不是问题,值是从超类获取的,我如何重写它?很好,那么您必须更正您的setValue,类似这样:setValue:function(value){MyField.superclass.setValue.call(this,value);}非常详细的答案。
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
}));