ExtJS 4.2.1不使用standardSubmit提交表单

时间:2013-07-17 08:14:43

标签: extjs extjs4.2

我正在尝试通过post方法提交表单,该方法使用extjs 4.2.1中的standardSubmit在新窗口中打开一个URL

getFields函数中的ext-all-debug.js抛出错误

getFields: function() {
    return this.monitor.getItems();
},

未捕获的TypeError:无法调用方法'getItems'为null

此处监视器对象显示为null。

单击链接将打开一个包含表单的消息窗口。单击“是”,表单必须在打开新窗口的情况下提交。

我的表格是:

initComponent: function() {
    var me = this;

    Ext.applyIf(me, {
        items: [
        {
            xtype: 'form',
            flex: 1,
            itemId: 'importForm',
            layout: {
                align: 'center',
                type: 'vbox'
            },
            bodyPadding: 20,
            standardSubmit: true,
            items: [
            {
                xtype: 'hiddenfield',
                itemId: 'user_id',
                fieldLabel: 'Label',
                name: 'user_id'
            },
            {
                xtype: 'label',
                itemId: 'formLabel',
                padding: 5,
                text: 'My Label'
            },
            {
                xtype: 'container',
                margin: '10 0 0 0',
                layout: {
                    align: 'middle',
                    pack: 'center',
                    type: 'hbox'
                },
                items: [
                {
                    xtype: 'button',
                    itemId: 'btnImport',
                    margin: '20 0 0 0',
                    width: 75,
                    text: 'Yes'
                },
                {
                    xtype: 'button',
                    cls: 'btn-no',
                    itemId: 'btnCancel',
                    margin: '0 0 0 10',
                    width: 75,
                    text: 'No'
                }]
            }]
        }]
    });

提交表单的代码是:

me.form.getForm().doAction('standardsubmit',{
    target : '_blank',
    method : 'POST',
    standardSubmit:true,
    url : 'http://www.mysite.com'
});

完全相同的代码在Extjs 4.1.3中有效,但在4.2.1中显示错误

这是一个错误还是我的代码出了问题?

2 个答案:

答案 0 :(得分:8)

找到错误原因。表单提交下面的代码有一个关闭窗口的语句,它抛出了异常。

me.form.getForm().doAction('standardsubmit',{
    target : '_blank',
    method : 'POST',
    standardSubmit:true,
    url : 'http://www.mysite.com'
});
me.abstractcomponent.close(); <----- THIS CAUSED THE ERROR

原因可能是窗体在表单等待/响应某些操作时立即关闭。

添加setTimeout()事件可以解决问题:

setTimeout(function(){me.abstractcomponent.close();},500);

希望它对其他人也有用!!!

答案 1 :(得分:3)

这有助于确定问题。问题是在启动异步请求之前销毁了表单对象。处理此问题的更好方法是添加请求处理程序,以便在返回响应后立即销毁表单。

form.submit({
    success: function(form, action) {
      yourcomponent.close();//or destroy();
    },
    failure: function(form, action) {
        yourcomponent.close();//or destroy();
    }
});

http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.Basic