Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.02.2010, 15:01
mexoboy вне форума Посмотреть профиль Отправить личное сообщение для mexoboy Найти все сообщения от mexoboy
  № 1  
Ответить с цитированием
mexoboy

Регистрация: Dec 2009
Сообщений: 48
По умолчанию Проблемы с priority в addEventListener

Здравствуйте, столкнулся с проблемой выставления приоритетов прослушивателей эвентов. Есть два типа эвентов - один отвечает за информирование о состоянии (MyFirstEvent), второй о непосредственно сообщает о действии, которое нужно выполнить (MySecondryEvent). В экземпляре класса MovieClip в конструкторе добовляю прослушивальщика MySecondryEvent. Ожидалось, что после создания экземпляра класса MyTestObject и установки прослушивальщика MyFirstEvent с более высоким приоритетом, чем у MySecondryEvent при отмене эвента, не будет обрабатываться следующий за ним. На деле оказалось не так =( В чем может быть проблема?

Код AS1/AS2:
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

Старый 16.02.2010, 15:56
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Приоритет - это для того же события, а не для разных.
__________________
Hell is the possibility of sanity

Старый 16.02.2010, 16:28
mexoboy вне форума Посмотреть профиль Отправить личное сообщение для mexoboy Найти все сообщения от mexoboy
  № 3  
Ответить с цитированием
mexoboy

Регистрация: Dec 2009
Сообщений: 48
Может кто подскажет, как можно организовать следующее. Есть некий класс. В нем крутятся свои эвенты(FirstEvent). Для каждого эвента внутри прописана своя логика действий. Если обработчик эвента не выполнял метод preventDefault(), то запустилась-бы логика внутри класса - если-же обработчик выполнил preventDefault(), то логика-бы проигнорировалась.

К примеру у нас есть кнопка. Мне необходимо, чтоб при клике по ней выскакивало сообщение, но при этом хочу, чтоб у меня была возможность вешать обработчик, который следил-бы за тем - все-ли условия выполнены? Т.е. логика выполнения находится в классе, проверка в обработчике событий.

Буду благодарен за любую помощь!

Старый 16.02.2010, 16:44
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Я думаю в таком случае проще stopPropagation() / stopImmediatePropagation() сделать, чем придумывать как preventDefault() реализовать. Первое вам никак реализовывать не надо, просто вызвали, и распространение событий закончится, а второе - нужно в дефолтном обработчике проверить isDefaultPrevented и дальше уже строуть логику в зависимости от этого.
__________________
Hell is the possibility of sanity

Старый 16.02.2010, 17:04
mexoboy вне форума Посмотреть профиль Отправить личное сообщение для mexoboy Найти все сообщения от mexoboy
  № 5  
Ответить с цитированием
mexoboy

Регистрация: Dec 2009
Сообщений: 48
2wvxvw, а как назначить дефалтный обработчик для эвента? Я правильно понимаю, что это обычный добавление прослушивание с самым низким приоритетом? Так-как ничего в доках про дефалтные обработчики я не нашел =(

Старый 16.02.2010, 17:52
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Это чистая условность. Т.е. имеется в виду обработчик, который подписывает сам компонент, а не другие компоненты. Т.е. пример для тексфилда - отобразить букву после нажатия на клавишу - это дефолтное поведение, и, скорее всего в текстфилде есть специальный слушатель для этого, т.как получить на него ссылку вы не можете, но иногда нужно сделать так, чтобы он не отобрзил букву, для этого вы и используете preventDefault() - а в самом дефолтном обработчике автор компонента заложил функционал типа "если да то, если нет - то нет".
__________________
Hell is the possibility of sanity

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:20.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 23:20.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.