2012-02-26 5 views
6

У меня есть extjs2 FormPanel:близко ExtJS окно после того, как форма представления

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(); 

Как вы можете видеть, форма панели находится внутри окна как элемент. Я должен закрыть окно после успешного представления формы, но я понятия не имею, как получить доступ к объекту окна внутри моего обработчика успеха.

Как я могу скрыть окно после успешной подачи формы?

ответ

7

Перед созданием формы просто сохраните ссылку на окно или его дочерние элементы. Например, вы можете использовать кнопку paremeter, что функция handler пропускается:

 handler: function(button, e){ 

[...]

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

Или, как вы, по-видимому, уже есть окно в переменной (win), вы можете просто использовать это, чтобы закрыть окно:

win.close(); 

, но это зависит от переменной win доступен в функции успеха, которую мы не можем принять из кода, который вы указали.

+0

Этот код не работает, но, как вы сказали в своем ответе, я сделал 'win' доступным в моем коде (создав выигрыш и форму, а затем добавив форму к выигрышу' win.add() ') и называется 'win.close()' внутри обработчика. – danrah

+0

'function (button, e)' именно то, что мне нужно для передачи информации о внешней форме обработчику. Всегда всегда возвращайтесь к документации и смотрите сигнатуры функции прослушивателя событий. – Meredith

+0

Обычно я просто копирую целую подпись в свой код и игнорирую мою среду IDE, жалуясь на неуспешные параметры. – AndreKR

Смежные вопросы