Получение формы из события щелчка в контроллере в ExtJS?

Я расширяю пример, приведенный в http://docs.sencha.com/architect/2-0/#!/guide/views_forms_extjs, чтобы использовать более ориентированный на MVC подход. Поэтому для этого я хочу переместить обработчик кликов из представления во вновь созданный контроллер.

У меня щелчок даже работает нормально, но я понятия не имею, как работать с формой из контекста контроллера (представление использовало 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
            }
        });
    }

});

Очевидно, что this в контексте onLoginButtonClick больше не является представлением, а вместо этого является контроллером.

Учитывая предоставленные мне параметры (кнопка Ext.button.Button, событие e, параметры объекта), как мне получить отправку в соответствующей форме?

Я должен отметить это, используя ExtJS 4.


person James McMahon    schedule 18.07.2012    source источник


Ответы (1)


button.up('form');

будет делать свое дело.

Чтобы получить объект BasicForm для работы, используйте

button.up('форма').getForm()

person Neil McGuigan    schedule 18.07.2012
comment
Для меня это имеет смысл, это должно работать, но когда я это делаю, я получаю Uncaught TypeError: Object [object Object] не имеет метода 'isValid'. - person James McMahon; 18.07.2012
comment
это потому, что форма не имеет метода isValid(). Однако у формы есть внутренняя форма BasicForm, которая имеет метод isValid(). Вы должны использовать нечетное выражение form.form.isValid(), чтобы получить его :) docs.sencha.com/ext-js/4-1/#!/api/Ext.form.Basic-method-isValid - person Neil McGuigan; 18.07.2012
comment
Спасибо, это работает. Вы также можете использовать .getForm() вместо формы. Или выполните запрос, используя Ext.ComponentQuery.query(#formid)[0].getForm() - person James McMahon; 18.07.2012