![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+3 17.04.11]
Регистрация: Mar 2011
Сообщений: 168
|
Здравствуйте. Создал статический класс А (т.е. класс со всеми статическими методами и свойствами). Отсюда пользуюсь тем, что могу не создавать его экземпляр. Появилась необходимость пользовательского события, т.е. мой класс А, выплевывает событие, а слушатель на него я почему-то повесить не могу! Это действительно так, на статический класс нельзя повесить слушатель?
|
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Слушатель можно повесить на экземпляр класса, а не на класс. Ищите на форуме, буквально на прошлой неделе тоже самое спрашивали.
|
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
создайте
доступ
итп Цитата:
__________________
Отряд Котовскага |
|
|||||
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; } |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
а зачем так? можно ведь и проще, как я писал. Конструктор сам вызовется при первом обращении.
__________________
Отряд Котовскага |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Можно и "класс подписать"))
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); } } }
__________________
Reality.getBounds(this); |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Таким образом, например, сделан
в SpringFramework.
По сути глобальный бродкастер. В некоторых случаях удобно.
__________________
Отряд Котовскага |
|
|||||
|
Wolsh а чем это отличается от того что я предложил 2мя постами выше?
Котяра имхо такой синтаксис как у меня и Wolsh удобнее, нежели писать еще одну строчку, опять же как написано выше, я ограничиваю возможность диспатчить ивент только телом этого класса. В чем смысл того что я сделал: 1. Есть некий ApplicationData в нем находятся настройки \ опции для всего приложения, есть некий UserData это некие данные о пользователе, его имя, уровень, войска и т.д., которые могут обновляться и соответственно нам надо это отображать. 2. В ApplicationData: 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); } 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. |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
nOobCrafter вопрос был в другом.
я кстати хотел дописать в своём посте что можете по желанию дописать свои статические методы dispatchEvent/addEventListener, которые будут декораторами для константы dispatcher. Но я подумал, что до этого додумаются сами. А твой код ужасен и совсем не в тему. )
__________________
Отряд Котовскага Последний раз редактировалось Котяра; 09.08.2011 в 13:10. |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|