如何确保在Ext.FormPanel成功提交数据之前不执行函数?

时间:2010-12-23 10:09:13

标签: javascript extjs callback

我有一个Ext.FormPanel,它有一个Save按钮,按此顺序执行两项操作:(1)发布数据,(2)go返回到调用它的页面。

buttons: [{
        text: 'Save',
        handler: function() {
            if(panel_form.getForm().isValid()){
                panel_form.getForm().getEl().dom.action = 'backend/page/blocks/edit_positioned_post/17.html';
                panel_form.getForm().getEl().dom.method = 'POST';
                panel_form.getForm().submit(); //FIRST POST DATA
                replace_region_with_uri_content('/backend/page'); //THEN GO BACK
            } else {
                Ext.Msg.minWidth = 360;
                Ext.Msg.alert('Invalid Form', 'Some fields are invalid, please correct.');
            }
        }
    },{
        text: 'Cancel',
        handler: function(){
            replace_region_with_uri_content('/backend/page');
        }
    }]

然而实际发生是倒退,正如我在Firebug中看到的那样,即(1)返回(2)帖子数据,导致返回的网格未显示更新的数据

alt text

如何在replace_region_with_uri_content()完成后强制执行panel_form.getForm().submit(),即将第一个函数作为第二个函数的回调发送?

2 个答案:

答案 0 :(得分:1)

您应该向表单添加一个事件,查看BasicForm的actioncomplete事件 -

http://dev.sencha.com/deploy/dev/docs/?class=Ext.form.BasicForm

您应该只在此事件执行后重定向到此表单应该已提交。

答案 1 :(得分:0)

我发现它,你可以在submit()的参数数组中添加一个“成功函数”,如下所示:

    buttons: [{
            text: 'Save',
            handler: function() {
                if(panel_form.getForm().isValid()){
                    panel_form.getForm().getEl().dom.action = 'backend/page/blocks/edit_positioned_post/17.html';
                    panel_form.getForm().getEl().dom.method = 'POST';
                    panel_form.getForm().submit({
                        success : function(form, action) {
                            replace_region_with_uri_content('/backend/page');
                        }
                    })
                } else {
                    Ext.Msg.minWidth = 360;
                    Ext.Msg.alert('Invalid Form', 'Some fields are invalid, please correct.');
                }
            }
        },{
            text: 'Cancel',
            handler: function(){
                replace_region_with_uri_content('/backend/page');
            }
        }]
});