2012-02-26 18 views
6

tengo una FormPanel extjs2:cerrar ventana extjs después del envío del formulario

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' 
     }] 
    }); 

y una ventana:

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

Como se puede ver, el panel de formato está dentro de la ventana como un elemento. Tengo que cerrar la ventana después de una presentación exitosa del formulario, pero no tengo idea de cómo acceder al objeto ventana dentro de mi controlador de éxito.

¿Cómo puedo ocultar la ventana después de enviar correctamente el formulario?

Respuesta

7

Simplemente guarde una referencia a la ventana o uno de sus hijos antes de crear el formulario. Por ejemplo, puede utilizar el botón Paremeter que la función se pasa handler:

 handler: function(button, e){ 

[...]

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

O, a medida que al parecer ya tiene la ventana en una variable (win), puede usarlo para cerrar la ventana:

win.close(); 

pero eso depende de la variable win está disponible dentro de la función de éxito, que no podemos suponer desde el código que proporcionó.

+0

El código anterior no funcionó, pero como sugirió en su respuesta, hice 'win' disponible en mi código (creando win y form, y luego agregando formulario al win por' win.add() ') y llamado 'win.close()' dentro del manejador. – danrah

+0

'función (botón, e)' exactamente lo que necesitaba para pasar información sobre un formulario externo al controlador. Siempre siempre siempre regrese a la documentación y vea las firmas de la función del oyente del evento. – Meredith

+0

Normalmente solo copio toda la firma en mi código e ignoro mi IDE quejándose de los parámetros no procesados. – AndreKR

Cuestiones relacionadas