|
|
|||||
Регистрация: Dec 2013
Сообщений: 19
|
Как удалить слушатели событий
Нужна помощь. Есть несколько кнопок класса MainButton созданные циклом.
В классе MainButton к каждой кнопке крепится слушатель. Как мне удалить слушатели всех этих кнопок, после клика на любую кнопку? Знаю что есть dispatchEvent, но как сразу удалить ВСЕ слушатели кнопок, а не только по какой делаешь клик? Последний раз редактировалось BAXTER; 11.12.2013 в 20:36. |
|
|||||
Регистрация: Aug 2012
Сообщений: 297
|
|
|
|||||
Dip52, ваш код будет пытаться отписывать несуществующий слушатель. Слушателей вы удаляете в родителе, поэтому функция с названием onCLICK будет искаться в самом родителе, а не в кнопке. А нужно отписывать тот метод, который действительно подписан, то есть BUTTON.onCLICK. Но onClick - приватный метод, к нему нет доступа из родителя.
Цитата:
Короче, я предлагаю сделать так У вас в коде один существенный недстаток - каждая кнопка хранит в себе логику обработки нажатий других кнопок. Это, во-первых, здорово запутывает, а во-вторых усложняет работу с бОльшим количеством кнопок (для каждой новой кнопки придется лезть в класс и добавлять еще один case. Добавлять событие нажатия на кнопку тоже лучше в родителе, который эти кнопки на себя вешает (на экран). Я бы советовал пересмотреть общую структуру кода и сделать так: Класс кнопки вообще убирайте, использовать будем только SimpleButton var buttonsArray:Array = new Array(); var listenersArray:Array = [button1Listener, button2Listener]; //Массив со слушателями, допустим что у нас 2 кнопки //Тут ваш позишн еррей for(var i:int = 0; i < positionArray.length; i++) { var button:SimpleButton = new SimpleButton(); //выставляем позишн, добавляем на экран и тд, а потом: button.addEventListener(MouseEvent.CLICK, listenersArray[i]); buttonsArray.push(button); } function button1Listener(e:MouseEvent):void { //код removeAllListeners(); } function button2Listener(e:MouseEvent):void { //код removeAllListeners(); } function removeAllListeners():void { for(var i:int = 0; i < listenersArray.length; i++) { buttonsArray[i].removeEventListener(MouseEvent.CLICK, listenersArray[i]); } } ... for(var i:int = 0; i < positionArray.length; i++) { var button:SimpleButton = new SimpleButton(); //выставляем позишн, добавляем на экран и тд, а потом: button.addEventListener(MouseEvent.CLICK, listenersArray[i]); button.addEventListener(MouseEvent.CLICK, removeAllListeners); buttonsArray.push(button); } function button1Listener(e:MouseEvent):void { //код } function button2Listener(e:MouseEvent):void { //код } function removeAllListeners(e:MouseEvent = null):void { for(var i:int = 0; i < listenersArray.length; i++) { buttonsArray[i].removeEventListener(MouseEvent.CLICK, listenersArray[i]); } } Последний раз редактировалось KumoKairo; 11.12.2013 в 21:46. |
|
|||||
Регистрация: Dec 2013
Сообщений: 19
|
Огромное спасибо! Вроде все просто, буду пробовать.
Последний раз редактировалось BAXTER; 11.12.2013 в 21:43. |
|
|||||
Регистрация: Dec 2013
Сообщений: 19
|
no problem. Хотел как лучше
|
Часовой пояс GMT +4, время: 18:07. |
|
« Предыдущая тема | Следующая тема » |
|
|