表单提交后关闭extjs窗口

时间:2012-02-26 19:22:13

标签: extjs

我有一个extjs2 formpanel:

   var fsf = new Ext.FormPanel({
        labelWidth: 75, // label settings here cascade unless overridden
        frame:true,
        id: 'formPanel',
        title: 'Simple Form with FieldSets',
        bodyStyle:'padding:5px 5px 0',
        width: 550,

        items: [{
            xtype:'fieldset',
            checkboxToggle:true,
            title: 'User Information',
            autoHeight:true,
            defaults: {width: 210},
            defaultType: 'textfield',
            collapsed: true,
            items :[{
                    fieldLabel: 'First Name',
                    name: 'first',
                    allowBlank:false
                },{
                    fieldLabel: 'Last Name',
                    name: 'last'
                },{
                    fieldLabel: 'Company',
                    name: 'company'
                }, {
                    fieldLabel: 'Email',
                    name: 'email',
                    vtype:'email'
                }
            ]
        },{
            xtype:'fieldset',
            title: 'Phone Number',
            collapsible: true,
            autoHeight:true,
            defaults: {width: 210},
            defaultType: 'textfield',
            items :[{
                    fieldLabel: 'Home',
                    name: 'home',
                    value: '(888) 555-1212'
                },{
                    fieldLabel: 'Business',
                    name: 'business'
                },{
                    fieldLabel: 'Mobile',
                    name: 'mobile'
                },{
                    fieldLabel: 'Fax',
                    name: 'fax'
                }
            ]
        }],

        buttons: [{
            text: 'Save',
            handler: function(){
                var form = Ext.getCmp('formPanel').getForm();
                if(form.isValid())
                    form.submit({
                        waitMsg:'Loading...',
                        url: 'RepeatSession.jsp',
                        success: function(form,action) {
                            //we have to close the window here!!
                        },
                        failure: function(form,action){
                            Ext.MessageBox.alert('Erro',action.result.data.msg);
                        }
                    });
            }
        },{
            text: 'Cancel'
        }]
    });

和一个窗口:

 win = new Ext.Window(
            {
                layout: 'fit',
                width: 500,
                height: 300,
                modal: true,
                closeAction: 'hide',
                items: fsf
            });
     win.show();

如您所见,表单面板在窗口内作为项目。我必须在成功提交表单后关闭窗口,但我不知道如何访问成功处理程序中的窗口对象。

成功提交表单后如何隐藏窗口?

1 个答案:

答案 0 :(得分:7)

在创建表单之前,只需保存对窗口或其中一个子窗口的引用。例如,您可以使用按钮参数传递handler函数:

        handler: function(button, e){

[...]

                    success: function(form,action) {
                        button.up('.window').close();
                    },

或者,因为您显然已经在变量(win)中有窗口,您可以使用它来关闭窗口:

win.close();

但这取决于成功函数中可用的变量win,我们无法从您给出的代码中假设它。