2012-02-26 53 views
6

Tôi có một FormPanel extjs2:cửa sổ ExtJS đóng cửa sau khi biểu mẫu gửi

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

và một cửa sổ:

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

Như bạn thấy, bảng điều khiển dạng là bên trong cửa sổ như một mục. Tôi phải đóng cửa sổ sau khi gửi biểu mẫu thành công nhưng tôi không biết cách truy cập đối tượng cửa sổ bên trong trình xử lý thành công của mình.

Làm cách nào để ẩn cửa sổ sau khi gửi biểu mẫu thành công?

Trả lời

7

Chỉ lưu một tham chiếu đến cửa sổ hoặc một trong các con của nó trước khi tạo biểu mẫu. Ví dụ, bạn có thể sử dụng nút paremeter rằng handler chức năng được thông qua:

 handler: function(button, e){ 

[...]

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

Hoặc, như bạn dường như đã có cửa sổ trong một biến (win), bạn chỉ có thể sử dụng để đóng cửa sổ:

win.close(); 

nhưng điều đó phụ thuộc vào biến 012.có sẵn bên trong hàm thành công mà chúng tôi không thể giả định từ mã bạn đã cung cấp.

+0

Mã trên không hoạt động nhưng như bạn đã đề xuất trong câu trả lời, tôi đã tạo 'win' trong mã của tôi (bằng cách tạo win và form, sau đó thêm biểu mẫu vào chiến thắng bằng' win.add() ') và được gọi là 'win.close()' bên trong trình xử lý. – danrah

+0

'chức năng (nút, e)' chính xác những gì tôi cần để chuyển thông tin về một biểu mẫu bên ngoài cho trình xử lý. Luôn luôn luôn quay trở lại tài liệu và xem các chữ ký chức năng của trình nghe sự kiện. – Meredith

+0

Tôi thường chỉ cần sao chép toàn bộ chữ ký vào mã của tôi và bỏ qua IDE của tôi phàn nàn về các tham số chưa được đánh dấu. – AndreKR

Các vấn đề liên quan