|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Dec 2009
Сообщений: 48
|
Проблемы с priority в addEventListener
Здравствуйте, столкнулся с проблемой выставления приоритетов прослушивателей эвентов. Есть два типа эвентов - один отвечает за информирование о состоянии (MyFirstEvent), второй о непосредственно сообщает о действии, которое нужно выполнить (MySecondryEvent). В экземпляре класса MovieClip в конструкторе добовляю прослушивальщика MySecondryEvent. Ожидалось, что после создания экземпляра класса MyTestObject и установки прослушивальщика MyFirstEvent с более высоким приоритетом, чем у MySecondryEvent при отмене эвента, не будет обрабатываться следующий за ним. На деле оказалось не так =( В чем может быть проблема?
public class MyFirstEvent extends Event { public static const ITS_HAPPENED:String = "atata"; public function MyFirstEvent (type:String):void { super(type, false, true); } public override function toString():String { return formatToString("MyFirstEvent"); } public override function preventDefault():void { stopImmediatePropagation(); } } public class MySecondryEvent extends Event { public static const ACTION:String = "action"; public function MySecondryEvent (type:String):void { super(type); } } public class MyTestObject extends MovieClip { public function MyTestObject() { addEventListener(MySecondryEvent.ACTION, actionFunction, false, 0); } private function actionFunction(e:MySecondryEvent):void { trace('its, happened'); } } var o:MyTestObject = new MyTestObject(); o.addEventListener(MyFirstEvent.ITS_HAPPENED, handlerFunction, false, 1); function handlerFunction(e:MyFirstEvent):void { trace('MyFirstEvent run'); e.preventDefault(); } dispatchEvent(new MyFirstEvent(MyFirstEvent.ITS_HAPPENED)); dispatchEvent(new MySecondryEvent(MySecondryEvent.ACTION)); // MyFirstEvent run // its, happened |
|
|||||
Регистрация: Dec 2009
Сообщений: 48
|
Может кто подскажет, как можно организовать следующее. Есть некий класс. В нем крутятся свои эвенты(FirstEvent). Для каждого эвента внутри прописана своя логика действий. Если обработчик эвента не выполнял метод preventDefault(), то запустилась-бы логика внутри класса - если-же обработчик выполнил preventDefault(), то логика-бы проигнорировалась.
К примеру у нас есть кнопка. Мне необходимо, чтоб при клике по ней выскакивало сообщение, но при этом хочу, чтоб у меня была возможность вешать обработчик, который следил-бы за тем - все-ли условия выполнены? Т.е. логика выполнения находится в классе, проверка в обработчике событий. Буду благодарен за любую помощь! |
|
|||||
Modus ponens
|
Я думаю в таком случае проще stopPropagation() / stopImmediatePropagation() сделать, чем придумывать как preventDefault() реализовать. Первое вам никак реализовывать не надо, просто вызвали, и распространение событий закончится, а второе - нужно в дефолтном обработчике проверить isDefaultPrevented и дальше уже строуть логику в зависимости от этого.
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Dec 2009
Сообщений: 48
|
2wvxvw, а как назначить дефалтный обработчик для эвента? Я правильно понимаю, что это обычный добавление прослушивание с самым низким приоритетом? Так-как ничего в доках про дефалтные обработчики я не нашел =(
|
|
|||||
Modus ponens
|
Это чистая условность. Т.е. имеется в виду обработчик, который подписывает сам компонент, а не другие компоненты. Т.е. пример для тексфилда - отобразить букву после нажатия на клавишу - это дефолтное поведение, и, скорее всего в текстфилде есть специальный слушатель для этого, т.как получить на него ссылку вы не можете, но иногда нужно сделать так, чтобы он не отобрзил букву, для этого вы и используете preventDefault() - а в самом дефолтном обработчике автор компонента заложил функционал типа "если да то, если нет - то нет".
__________________
Hell is the possibility of sanity |
Часовой пояс GMT +4, время: 23:20. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|