ExtJs,提交表单时不调用自定义TextField的getValue()函数

时间:2014-08-18 19:28:31

标签: javascript forms extjs extjs3

我有一个扩展Ext.form.TextField的自定义文本字段(ExtJs 3.1.1)。我已覆盖getValue以提交计算值而不是超类中的原始值。直接调用getValue时,返回值是正确的。但是,在提交父表单时,根本没有调用getValuegetValue方法中的调试消息不会出现在控制台中)。如何覆盖表单提交时返回的值? 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()

1 个答案:

答案 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。该值是实际发送到服务器的值。