![]() |
Реализация всплытия для не DisplayObject
Как можно реализовать систему всплытия для не DisplayObject? Конкретно интересует такой момент:
Есть иерархия объектов с 3-4 уровневой вложенностью, необходимо, чтобы родитель мог подписаться на события "внуков" и "правнуков". |
Дедушка слушает сына, сын слушает своего сына?
|
Сейчас так и сделано.Тогда так, это единственный путь решения?Родитель подписывается на ребенка и шлет выше. Я просто не знаю, как устроен этот механизм в DisplayObject, где бы почитать про это.
|
Можно создать массив в котором хранятся ссылки на объекты всей ветки, от корня до конца. В переопределенном методе dispatchEvent при bubbles=true обходится массив начиная от event.target и диспатчится тоже событие.
|
Какой массив? Зачем массив?
наследуем детей от этого кода вместо EventDispatcher-а и при добавлении в невизуальный контейнер выставляем у них eventParent на этот контейнер - при удалении зануляем Код AS3:
|
expl, в таком варианте событие будет клонироваться при каждом dispatchEvent.
|
я делал
Код AS3:
Цитата:
должен ведь смениться currentTarget |
Цитата:
Код AS3:
Проверил, НЕ клонируется. Код AS3:
|
Если у события не совпадает хозяин и корреспондент - то при рассылке клонируется вроде.
|
Код AS3:
|
Цитата:
Топик всёта-ки "Реализация всплытия для не DisplayObject " называется А вообще, если currentTarget эмулировать, то клонировать надо-бы и этот currentTarget выставлять |
Это не принципиально DisplayObject или нет. Если хочется повторить, то надо, чтобы не клонировалось при всплытии :)
|
Ничего не понял.
Попробую задать вопрос по другому: Что надо сделать "Если хочется повторить" и при этом "чтобы не клонировалось при всплытии"? |
Да, currentTarget тоже нужны. Etc, ты раньше писал, что в вашем MVC используется своя система всплытия как раз, не поделишься?
|
scarbo, боюсь, что сейчас это собственность Mail.Ru Group, к которой я отношения никакого не имею.
Кажется, там тоже клонируется событие при всплытии, но точно об этом знает Блуд. |
Ясно, спасибо. Я просто помню ты выкладывал картиночку, где всякие кружочки рисовал взаимосвязи, и там тебя еще спросили, типа как события организованы, на displayobject?ты ответил, что не дай бог. Вот у меня сейчас такая же ситуация.:)
|
Действительно, видимо криво в первый раз проверил, клонируется (не сказал бы что это проблема, но всё же):
Код AS3:
Код:
onChildChange:childБолее острая проблема - это то что при таком подходе нельзя верить target. currentTarget вроде правильно всё выдает. При необходимости придется перегружать target в классе события и присваивать вручную (мне не требовалось просто - обычно таргет в типизированное поле события себя записывает при отправке события) |
Ну хотя бы target надо сохранить. Уж с клонированием как-нибудь потом. Либо вообще реализовывать свой EventDispatcher, но есть подозрение, что он будет медленным.
Добавлено через 1 минуту scarbo, да можно и DisplayObject, Димарик например не против совершенно и оно вроде как даже быстрее, правда памяти больше жрёт. Только вот идеологически не очень. |
Вот здесь Event, в котором при клонировании target тянется от первоисточника.
|
Спросите у dimarik`а. Он мне показывал реализацию своего композитного ED и там, хоть всё достаточно понятно и логично, но очень круто. Кстати, его код распространяется (распространяется ли?) по лицензии MIT.
Мои размышления, когда я сам пытался это сделать (это часть переписки между мной и Димкой, кстати. Надеюсь, он не расстроится что кусок личной переписки выкладываю сюда): Цитата:
|
Ок,спрошу.
|
Самое смешное с флешевыми событиями то, что если не мудрствуя лукаво переопределить clone() следующим образом:
Код AS3:
Что до всплытия - если уж сами организовываете все... я понимаю, стандартный интерфейс, и хочется соответсвовать, но подумайте, а нужны ли вам stopPropagation, stopImmediatePropagation, preventDefault, eventPhase и еще парочка нативных методов, которые сейчас не вспомню, которые будут добавлены в ваши классы событий? Так уж ли часто вы используете что либо из вышеописанного (и знали ли вы вообще, что такие существуют)? :) Я к тому, что если уж делать все с нуля - зачем брать уже готовое, которое работает не так, как вам нужно + половина функионала избыточна? Т.е. конечно, в общем случае изобретать велосипед плохо, но если вам все равно его так или иначе изобретать, то разбирать старый чтобы создать новый? |
Ага, wvxvw верно написал. Решение проблемы можно взять от dimarik`a: он просто нафигачил декоратор.
Код AS3:
|
Цитата:
Добавлено через 5 минут Цитата:
|
Цитата:
|
Нет, вы меня не так поняли. Я имел в виду, что эти методы / свойства в подавляющем большинстве случаев не нужны, или, еще хуже - бессмысленны. И именно поэтому знать о них не обязательно. Или, скажем так, не зазорно не знать. Точно так же, как, честно скажу, ни разу не пользовался accessibility, и понятия не имею, как оно работает.
|
wvxvw, я понял, ты имеешь ввиду, что их не нужно "имитировать" в своей реализации, они как бы лишние, в довесок. Ок, мне это и не нужно было. Но вот все таки preventDefault и stopImmediatePropagation нужны довольно таки часто.
|
| Часовой пояс GMT +4, время: 10:09. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.