ExtJS MVC: как убрать обработчик из динамического контроллера - PullRequest
2 голосов
/ 15 ноября 2011

Я создаю динамический контроллер в соответствии с новым шаблоном MVC в ExtJS4 и столкнулся с небольшой проблемой.Я использовал метод this.control для подключения контроллера к моему представлению.При создании контроллера во второй раз (переходя вперед и назад в моей навигации) я подключал их пару раз.Мой вопрос: каков наилучший способ уничтожить контроллер или удалить всех слушателей, которые я настроил с помощью команды this.control.

Заранее спасибо Крис


Код моего нового контроллера выглядит следующим образом:

Я создаю новый контроллер следующим образом:

var step1Controller = Ext.create("MyApp.controller.Step1Controller", {
    application : this.application
});
step1Controller.init();

В функции init моего контроллера я подключил свой контроллер к представлениюкак это:

init : function() {
    this.addEvents(['step1completed','basecontructionaborted']);
    this.setupScreenLayout();
    this.getTmpConfiguredControlModelsStore().removeAll();
    this.application.fireEvent("addBreadCrumb", "Inbetriebnahme");
    this.application.fireEvent("addBreadCrumb", "Schritt 1/3");

    this.control({
        '#addmodelbutton' : {
            click : this.onAddBtnClick
        },
        '#modelviewer' : {
            modelselected : this.onPanelSelect
        },
        '#navigationcontainer #movemodelleftbutton' : {
            click : this.onMoveModelLeftClick
        },
        '#navigationcontainer #continuestep2' : {
            click : this.onContinueStep2Click
        },
        '#navigationcontainer #abortbutton' : {
            click : this.onAbortButtonClick
        }
    });

    console.log('[BaseConstruction | init] completed');
}

1 Ответ

1 голос
/ 08 ноября 2013

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

Я загружаю контроллеры / представления динамически, и все слушатели были подключены через app.control внутри init (контроллера) контроллера.Работал нормально, пока я не начал неоднократно разрушать / инициализировать представления.Слушатели оставались на представлениях после view.destroy (), поэтому инициализация их позже в будущем приводила к тому, что эти слушатели (то есть рендеринг, клики и т. Д.) Запускались дважды.

    app.control({
        'element': {
            beforerender: {
                fn: function(thing){
                    // beforerender stuff for thing

                    thing.on('select', function(this, record, item, index){
                        console.log('select fired');
                    });
                },
                single: true
            },
        }
    });

Обратите внимание на «single: true», который прикреплен к «beforerender».Это важная часть.Все остальные слушатели, которые ранее были написаны как 'beforerender', были перемещены в него с помощью .on ().

Cheers!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...