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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.08.2011, 00:41
Max360 вне форума Посмотреть профиль Отправить личное сообщение для Max360 Найти все сообщения от Max360
  № 1  
Ответить с цитированием
Max360
[+3 17.04.11]

Регистрация: Mar 2011
Сообщений: 168
По умолчанию Слушатель события для статического класса

Здравствуйте. Создал статический класс А (т.е. класс со всеми статическими методами и свойствами). Отсюда пользуюсь тем, что могу не создавать его экземпляр. Появилась необходимость пользовательского события, т.е. мой класс А, выплевывает событие, а слушатель на него я почему-то повесить не могу! Это действительно так, на статический класс нельзя повесить слушатель?

Старый 09.08.2011, 00:45
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 2  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Слушатель можно повесить на экземпляр класса, а не на класс. Ищите на форуме, буквально на прошлой неделе тоже самое спрашивали.

Старый 09.08.2011, 00:52
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 3  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
создайте
Код AS3:
StaticClass
static const dispatcher:EventDispatcher = new EventDispatcher();
доступ
Код AS3:
StaticClass.dispatcher.addEventListener/dispatchEvent
итп
Цитата:
мой класс А, выплевывает событие
а как вы этого добились?
__________________
Отряд Котовскага

Старый 09.08.2011, 00:54
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 4  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
Код AS3:
	public class UserData extends EventDispatcher
	{
//- PRIVATE & PROTECTED VARIABLES -------------------------------------------------------------------------
		private static var _instance			:UserData;						// он диспатчит события об обновлении
....
 
//- CONSTRUCTOR	-------------------------------------------------------------------------------------------
		public function UserData() 
		{
			_instance 		= this;
		}
 
//- PUBLIC & INTERNAL METHODS -----------------------------------------------------------------------------
		public static function addEventListener($eventType:String, $handler:Function, $useCapture:Boolean = false, $priority:int = 0, $useWeakReference:Boolean = true):void
		{
			_instance.addEventListener($eventType, $handler, $useCapture, $priority, $useWeakReference);
		}
 
		public static function removeEventListener($eventType:String, $handler:Function, $useCapture:Boolean = false) : void
		{
			_instance.removeEventListener($eventType, $handler, $useCapture);
		}
 
		public function updateArmy($data:Array):void  
		{
....
				if (UserData._instance)
					UserData._instance.dispatchEvent(new Event(UserData.UPDATE_ARMY));
				return;
		}
что то типа такого, только 1 раз надо будет вызвать конструктор.

Старый 09.08.2011, 01:35
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 5  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
а зачем так? можно ведь и проще, как я писал. Конструктор сам вызовется при первом обращении.
__________________
Отряд Котовскага

Старый 09.08.2011, 12:12
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Можно и "класс подписать"))
Код AS3:
package  
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
 
	public class Screamer
	{
		public static const SCREAM:String = "scream";
 
		private static const DISPATCHER:EventDispatcher = new EventDispatcher();
 
		public static function addEventListener(eventType:String, callback:Function):void
		{
			DISPATCHER.addEventListener(eventType, callback);
		}
 
		public static function dispatchEvent(event:Event):void
		{
			DISPATCHER.dispatchEvent(event);
		}
	}
 
}
Последний метод (Screamer.dispatchEvent) можно сделать приватным, чтобы посылать события только по воле класса, а не извне. А в таком виде usage будет -
Код AS3:
Screamer.addEventListener(Screamer.SCREAM, onScream);
Screamer.dispatchEvent(new Event(Screamer.SCREAM));
private function onScream(event:Event):void 
{
	trace("Scream");
}
__________________
Reality.getBounds(this);

Старый 09.08.2011, 12:49
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 7  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Таким образом, например, сделан
Код AS3:
 EventBus.dispatchEvent
в SpringFramework.
По сути глобальный бродкастер. В некоторых случаях удобно.
__________________
Отряд Котовскага

Старый 09.08.2011, 12:58
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 8  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
Wolsh а чем это отличается от того что я предложил 2мя постами выше?
Котяра имхо такой синтаксис как у меня и Wolsh удобнее, нежели писать еще одну строчку, опять же как написано выше, я ограничиваю возможность диспатчить ивент только телом этого класса.
В чем смысл того что я сделал:
1. Есть некий ApplicationData в нем находятся настройки \ опции для всего приложения, есть некий UserData это некие данные о пользователе, его имя, уровень, войска и т.д., которые могут обновляться и соответственно нам надо это отображать.
2. В ApplicationData:
Код AS1/AS2:
	public class ApplicationData
	{
//- PRIVATE & PROTECTED VARIABLES -------------------------------------------------------------------------
		private static var _user:UserData = new UserData();
 
//- PUBLIC & INTERNAL METHODS -----------------------------------------------------------------------------		
		public static function updateUserData($data:Object):void  
		{
			_user.update($data);
		}
В моем случае у меня только один метод для обновления инфы, а дальше в нем уже идет парсинг обьекта и диспатчинг событий. Таким образом только 1 класс может обновлять данные пользователя и мы имеем удобный синтаксис вида:
Код AS3:
			UserData.addEventListener(UserData.UPDATE_RESOURCES, onUserUpdateInfoHandler);
			UserData.addEventListener(UserData.UPDATE_LEVEL, onUserUpdateInfoHandler);
			UserData.addEventListener(UserData.UPDATE_TECHNOLOGIES, onUserUpdateInfoHandler);
			UserData.addEventListener(UserData.UPDATE_BUILDINGS, onUserUpdateInfoHandler);
 
 
		private function onUserUpdateInfoHandler(e:Event):void 
		{
			trace("USER UPDATE HANDLER", e.type);
			UserData.money
			UserData.level
			UserData.buildings
			....
		}
на мой взгляд это удобно и просто. Может правда не очень хорошо обьяснил и все же есть возможность создать еще один инстанс в другом месте и из него работать, я пока не думал как это ограничивать, но имхо это лучше чем просто глобальный бродкастер.
чем он мне не нравится, тем что иногда фиг отследишь что заставил его продиспатчить какое то событие. Вообще для оповещений о пользовательских и флешевых событиях у меня етсь другой класс.


Последний раз редактировалось nOobCrafter; 09.08.2011 в 13:01.
Старый 09.08.2011, 13:07
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 9  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
ApplicationData сильно смахивает на контроллер
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 09.08.2011, 13:07
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 10  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
nOobCrafter вопрос был в другом.
я кстати хотел дописать в своём посте что можете по желанию дописать свои статические методы dispatchEvent/addEventListener, которые будут декораторами для константы dispatcher.
Но я подумал, что до этого додумаются сами.

А твой код ужасен и совсем не в тему. )
__________________
Отряд Котовскага


Последний раз редактировалось Котяра; 09.08.2011 в 13:10.
Создать новую тему Ответ Часовой пояс GMT +4, время: 09:05.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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