![]() |
Свое всплывание событий.
Всем привет. Тут мелькала эта идея, но я шота не могу понять как сделать.
Входящие данные: 1. события разные. 99% — уже имеющийся в AS3 набор. 2. всплывать событиям придется в иерархии объектов типа EventDispatcher (?) 3. надо сохранить target нид хелп короч. |
не совсем понятна задача.
чем EventDispatcher плохо? да target не получается заменять. мне тоже это показалось странным. нужно будет свои евенты наследовать и реализовывать. |
Всплытие нативно поддерживается только DisplayObject'ом (участвует его #parent). Можете построить аналогичную систему или стройте иерархию, используя базовыми классами Shape, Sprite, etc.
|
Так вот и спрашиваю, как построить аналогичную систему =)
DisplayObject — крайний случай. |
Собственно, target можно хранить статически во время всплытия.
|
Чтобы сохранить таргет (только для своих классов Event-ов)
1) override get target 2) override clone |
etc нельзя. тогда произойдёт колапс, когда одно событие рождает другое.
|
Цитата:
|
Теперь target всегда сохраняется при клонировании и его не нужно явно передавать в конструктор MyEvent()
Код AS3:
Вообще все затевается ради всплывания событий в дереве моделей... я начинаю думать, что это лишнее. Зачем какой-то модели следить не за непосредственно подопечными, а и за их подопечными. Ну т.е. если меняется дочерняя модель — событие CHANGE, на которое реагирет изменениями текущая модель, что вызывает тот же CHANGE уже для его родителя. Поправьте, есличё. |
из последний 3х предложений не понял ничего.
|
одним предложением: а точно ли нужно всплывание событий в дереве моделей (MVC)?
|
Очень редко, но бывает нужно. В таких случаях я просто редиспатчу событие наверх.
Добавлено через 2 минуты Цитата:
|
Цитата:
|
Цитата:
Но ничего не имею против перекидывания target более старшим. Если не секрет, поделись почему возникла такая необходимость. |
секрет... для меня в первую очередь :D
поставил задачу, решил. а пригодится или нет — там посмотрим. только приступаю. |
Очень удобно знать таргет "наверху". "Там" можно проверить источник, который сгенирил ADDED или REMOVED, например. А таргетом может оказаться как ветка модели, так и её листок. Ответственное представление добавит/удалит подчиненные представления, ассоциированные с таргетом. Реализовать таргет нетронутым, если он был впервые установлен, в кастомном классе не должно составить труда. Но я упертый ) И пропагандирую использовать в деревьях то, что уже написано до нас - DisplayObject.
|
Цитата:
но когда только ради всплывания надо наследоваться от объекта с тучей ненужного борохла — меня как-то коробит... "неаккуратненько как-то" © и навязчиво. |
Зато нативно и шустро.
|
блин... смириться что ли с тем, что разрабы провоцируют носить кирпичи в сумочке от GUCCI :quiet:
|
Взвесьте "за" и "против" и решайте ).
|
Zebestov, ну раз у тебя не практическая задача требующая решения - я думаю пока и взвешивать рано. Попробуй это дело на практике, там будет куда виднее. На данный момент я однозначно против моделей из DO. Пожалуй, самый везкий аргумент - это очень много всякой ерунды по автокомплиту валится, а эксклудить лень ) Ну, а если серьезно - просто нужды не было острой нужды в шустром и простом с точки зрения программиста бабблинге.
|
@dimarik, странная пропаганда. памяти больше многократно и время создания больше многократно. но, до .. я же забыл! на бублинг всего в 2 раза быстрее! в общем пропагандируй =)
|
Цитата:
Добавлено через 1 минуту Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
На пальцах:
Как сделать рэ-диспатч при баблинге? Делается примерно так - parent.dispatshEvent(event), так вот, при этом таргет-ом будет уже parent, а не его ребенок который испустил всплывающее событие. |
Цитата:
|
| Часовой пояс GMT +4, время: 02:35. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.