extjs вызывает функцию Ext.onReady для класса - PullRequest
2 голосов
/ 12 ноября 2011

У меня есть такая структура:

Example.Form = Ext.extend(Ext.form.FormPanel, {
// other element

 , onSuccess:function(form, action) {
 }

}
Ext.reg('exampleform', Example.Form);

Ext.onReady(function() {
            var win = new Ext.Window({
                id:'formloadsubmit-win'
                ,items:{id:'add', xtype:'exampleform'}
            });
            win.show();
})

Я удаляю дополнительный код выше ...

Я хочу сделать это: когда я отправляю форму по функции-> onSuccess в классе Example.Form, можно закрыть окно в теле. (Когда результаты успеха были отправлены и тело открывающегося окна стало закрытым)

Я прошу прощения за мой плохой английский.

1 Ответ

1 голос
/ 13 ноября 2011

Структура кода должна позволять хранить компоненты, которые вы регистрируете как xtypes. Он также должен иметь пространство имен верхнего уровня для компонентов, составляющих приложение. Таким образом, вы всегда можете ссылаться на части вашего приложения. Это также хорошая идея, чтобы сломать логику контроллера. Для небольшого приложения один контроллер может работать нормально, но как только приложение растет, хорошо иметь много контроллеров для приложения, по одному для каждого элемента.

Вот модифицированная версия кода, который вы поместили в этот пример. Он будет обрабатывать событие успеха и структурирован в соответствии с рекомендациями, отмеченными выше.

    Ext.ns('Example');
    /* store components to be used by app */
    Ext.ns('Example.lib');
    /* store instances of app components */
    Ext.ns('Example.app');

    Example.lib.Form = Ext.extend(Ext.form.FormPanel, {
    // other element

     // moved to app controller
     //onSuccess:function(form, action) {
     //}

    });

    Ext.reg('exampleform', Example.lib.Form);

    Example.lib.FormWindow =  Ext.extend(Ext.Window,{
        initComponent: function(){
            /* add the items */
            this.items ={itemId:'add', xtype:'exampleform'};

            /* ext js requires this call for the framework to work */
            Example.lib.FormWindow.superclass.initComponent.apply(this, arguments);
        }
    });

    Ext.reg('exampleformwin', Example.lib.FormWindow);

    /*
        manage/control the app
    */
    Example.app.appController = {
        initApp: function(){
            Example.app.FormWindow = Ext.create({xtype:'exampleformwin', id:'formloadsubmit-win'});
            Example.app.FormWindow.show();

            /* get a reference to the 'add' form based on that item id and bind to the event */
            Example.app.FormWindow.get('add').on('success', this.onAddFormSuccess, this );

        },

        /* the logic to handle the add-form's sucess event */
        onAddFormSuccess: function(){
            Example.app.FormWindow.hide();
        }

    }

    Ext.onReady(function() {
        /* start the app */
        Example.app.appController.initApp()
    })
...