2012-07-18 40 views
3

我正在擴展http://docs.sencha.com/architect/2-0/#!/guide/views_forms_extjs中給出的示例以使用更多的以MVC爲中心的方法。因此,我希望將點擊處理程序從視圖移動到新創建的控制器。從ExtJS中的Controller中單擊事件獲取表單?

我有點擊甚至工作正常,但我不知道如何從控制器的上下文操作窗體(視圖使用this.getForm())。

這裏是我到目前爲止,

Ext.define('LoginExample.controller.LoginController', { 
    extend: 'Ext.app.Controller', 


    onLoginButtonClick: function(button, e, options) { 
     console.log('button clicked'); 


     if (this.getForm().isValid()) { 
      this.getForm().submit({ 
       url: 'login.php', 
       success: function(form, action) { 
        Ext.Msg.alert('Login Successful!'); 
       }, 
       failure: function(form, action) { 
        Ext.Msg.alert('Login Failed!'); 
       } 
      }); 
     } 
    }, 


    init: function() { 
     this.control({ 
      "#loginButton": { 
       click: this.onLoginButtonClick 
      } 
     }); 
    } 

}); 

顯然,這onLoginButtonClick的背景下已經不再是視圖,反而控制器。

給定給我的參數(Ext.button.Button按鈕,Event e,Object選項),如何獲得適當的表單提交?

我應該注意到這一點使用ExtJS的4

回答

4
button.up('form'); 

會做的伎倆。

爲了讓BasicForm對象進行操作,使用

button.up('form').getForm()

+0

這道理,我認爲應該工作,但是當我做,我得到「遺漏的類型錯誤:對象的翻譯:有沒有一種方法「的isValid 「」。 – 2012-07-18 18:39:33

+1

這是因爲表單沒有isValid()方法。表單確實有一個內部的BasicForm,它有一個isValid()方法。你必須使用奇怪的form.form.isValid()表達式來得到它:) http://docs.sencha.com/ext-js/4-1/#!/api/Ext.form.Basic-方法-isValid – 2012-07-18 18:41:50

+0

謝謝,這是有效的。您也可以使用.getForm()而不是表單。或者使用Ext.ComponentQuery.query(「#formid」)[0] .getForm() – 2012-07-18 18:47:55

相關問題