|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Диспатч одного потомка к другому потомку. Как?
Здравствуйте!
Возник такой ламерский вопросик: Как передать диспатч от одного потомка к другому? На словах наверное трудно будет объяснить что я хочу, по этому нарисовал схемку: [IMG]http://i.***********/i5/82/52/655282/Yzobrazhenye1.png[/IMG] Как передать событие от экземпляра класса Г к экземпляру В? Например, у экземпляра класса Г что то изменилось и он хочет уведомить об этом экземпляра В. Я предполагаю что ему нужно передать событие к экземпляра класса А, а тот в свою очередь передаст в экземпляра класса Майн, а тот уже вызовет соответствующий метод у экземпляра класса В. А если вложенность предков достигает 10 уровеней и больше, то получается надо создавать 10 слушателей? Или может есть какое то универсальное решение (какие то схемы, патерны)? Заранее спасибо за ответы!
__________________
ЛОГИКА - залог программирования! |
|
|||||
Регистрация: Dec 2009
Сообщений: 60
|
Как вариант - создать в Main экземпляр EventDispatcher и в классе Г делать диспатч своего события а в Б слушать.
|
|
|||||
petri, а можно подробнее? А то я ничего не понял. Я только учусь...
А можно еще вопросик: а как Экземпляру класса А, получить значение переменной класса Main. B то и то не дисплейобджект, т.е. через парент не получится.
__________________
ЛОГИКА - залог программирования! Последний раз редактировалось iNils; 29.10.2010 в 22:19. |
|
|||||
Регистрация: Jun 2010
Адрес: somewhere in the universe
Сообщений: 195
|
- in class B stage.addEventListener("myEvent",myHandlerEventFromG);
- in class G stage.dispatchEvent(new Event("myEvent")); если stage не доступен, то правильней всего передавать ссылку на Main и через Main передавать сообщения, либо пойти путем статик переменных/слушателей Цитата:
- либо in Main private var _myVar:… public static var myVar:… public function set myVar(value:…):void { Main.myVar = value _myVar = value; } Последний раз редактировалось easy.proger; 29.10.2010 в 22:31. |
|
|||||
easy.proger, покажи пожалуйста на простом примере, а то я вот сижу и не понимаю:
Майн package { import flash.display.*; import flash.events.*; public class Main extends Sprite { private var a:A public var s:uint=12 public function Main() { a=new A(this) addEventListener("hello",fff) } public function fff(e:Event):void { trace("dsdsd") } } } package { import flash.display.Sprite; import flash.events.Event; public class A { public function A(d:Sprite) { trace(d['s']) d.dispatchEvent(new Event("hello")) } } } Цитата:
__________________
ЛОГИКА - залог программирования! Последний раз редактировалось ZGG; 29.10.2010 в 23:15. |
|
|||||
Регистрация: Jun 2010
Адрес: somewhere in the universe
Сообщений: 195
|
stage.addEventListener("hello",fff)
stage.dispatchEvent(new Event("hello")) и как я говорил так делать не стоит и лучше передавать ссылку на Main внимательней нада быть ! можно еще так, но тоже плохая практика, однако если не хочется передавать ссылки и есть полная уверенность, что экземпляр Main будет один то: в Main public static var dispatcher:EventDispatcher = new EventDispatcher(); dispatcher.addEventListener("hello",fff); |
|
|||||
Регистрация: Jun 2010
Адрес: somewhere in the universe
Сообщений: 195
|
Совсем уже сплю, не заметил... да, действительно проблема в том, что автор сначала вызывает конструктор, а потом подписывается, я сначала подумал, что он не заметил, что я через stage предложил диспачить события
|
|
|||||
easy.proger, огромное спасибо за ответы!
Кажется понемножку начинаю разбираться. Цитата:
__________________
ЛОГИКА - залог программирования! |
Часовой пояс GMT +4, время: 01:51. |
|
« Предыдущая тема | Следующая тема » |
|
|