![]() |
MovieClip не принимает сообщение от родителя
Вложений: 1
Есть два класса - app (главный класс флэшки) и receiver (класс находящегося на сцене movie clip, по сути - потомок app);
app посылает сообщение и задача receiver - его услышать. receiver его не слышит. Полагаю, я плохо понимаю механизм посылки сообщений. Если кто либо может взглянуть на пример кода и поправить меня, буду очень благодарен. В приложенном файле весь пример целиком, а вот сам код app: Код:
package{Код:
package{ |
ты же пиши кому извещать..
создай например глобальный инстанс и к нему крепи листенеры.. |
Что значит "пиши, кому извещать"? Извещает app. Он - верхний в иерархии класс, глобальнее вроде некуда. А если "кого извещать" - если бы app знал имена потомков то не было бы смысла в сообщениях - проще методы потомков вызывать
|
можно написать :
Код:
root.addEventListener('APP_PROGRESS', onMessage);Код:
dispatchEvent(new Event('APP_PROGRESS',true));Я хочу понять принцип ошибки - где я не понял теорию? - иначе то что я делаю больше похоже на хак. |
Цитата:
Цитата:
ps: Названия классов пишутся с большой буквы, а обработчики приватные немешало бы сделать. |
А кто вас так научил классы называть и не научил кастомным событиям?
|
Знаю как сделать чтоб работало, но не понимаю почему не работает этот пример. Присоединяюсь к вопросу автора
|
Нужно использовать всплывающие события. Никаких хаков тут нет, событие от детей поднимается вверх по родителям. Если не использовать bubbling, то событие попадет только в те обработчики, которые были подписаны непосредственно у того, кто шлет событие.
|
akerka,
проблемы с твоим кодом возникают из-за идеологически неверно простроеных отношений между классами. Добиться работоспособности можно, используя bubbling и targeting. Но код в итоге получится корявым. Что делать: 1. Переименовать. Да-да. Нет слова app в английском. А сократить так можно и appendix и application и, думаю еще не одно слово. Код пишется в первую очередь для человека. Ну, и учесть, что имена классов начинаются с большой буквы. Это - самое важное. Остальное мелочи. 2. Где-то у тебя создается экземпляр класса receiver (но мы договорились, что переименуем этот класс на более понятное, что-то типа ApplicationPreloaderReceiver). Вот там, где он создается, и нужно передать ссылку на экземпляр класса ныне именуемого app. И, затем, подпишемся на его события. зачеркнуто И, затем, подпишем его на события этого класса. /зачеркнуто 3. В коде мы не будем использовать строки и навешивать нехарактерное вещание на класс Event. Просто создадим класс - наследник Event, например ApplicationPreloaderEvent и создадим в нем публичную статическую константу APPLICATION_PROGRESS:String = "applicationProgress" и в дальнейшем в коде будем использовать только ее для вещания событий этого типа. Примерно так. Теоретически возможно, что передать ссылку на экземпляр app будет затруднительно. В этом случае, коль уж это так тяжело, этот класс следует во-первых переименовать например: MyFirstApplication, а во-вторых сделать его синглтоном и подписываться на событие используя получение ссылки через getInstance(). Впрочем, это не рекомендуемая практика. удачи. |
2. Каким образом? Откроем всем ветрам приватные обработчики событий?
Чем это бабблинг корявый вдруг стал? |
| Часовой пояс GMT +4, время: 13:23. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.