« Отлов событий из Item Renderer'овВторая встреча RAFPUG в рамках Adobe Flex and AIR Pre-Release Tour »

Трекбек адрес этой записи

URL трекбека (щелкните правой кнопкой мыши и скопируйте ссылку)

12 комментариев

Комментарий от: rost [Учаснег] Email · http://flash-ripper.com/
Во дает, а?

Костя, наверное и сами разработчики Flash Player не знают о пузырьках... то есть о событиях Flash Player всего того, что знаешь о них ты :)
2008-01-22 @ 17:00
Комментарий от: Konstantin Kovalev [Учаснег] Email · http://riapriority.com/blogs/constantiner.php
Я знаю то, что ничего не знаю, а они знают все :)
2008-01-22 @ 17:04
Да. Это весьма полезная вещь.
Можно не заморачиваться на том, откуда (из какого контейнера или контрола) посылается событие, а потому запросто менять вложенность контейнеров.
2008-01-22 @ 18:35
Комментарий от: Konstantin Kovalev [Учаснег] Email · http://riapriority.com/blogs/constantiner.php
И точно так же можно подписаться на одно событие одного контейнера, а ловить кучу других от других вложенных контейнеров, про которые уже сто лет назад ты забыла. Тут тоже с умом подходить надо :)
2008-01-22 @ 18:38
И точно так же можно подписаться на одно событие одного контейнера, а ловить кучу других от других вложенных контейнеров


Я думаю, что есть смысл подписываться таким обобщенным образом все-таки на какие-то более-менее конкретные события (ClickAddUser), а не просто на клик. Тогда проблем с тем, что произошел отлов какого-то левого события не будет.
2008-01-22 @ 18:43
Комментарий от: Konstantin Kovalev [Учаснег] Email · http://riapriority.com/blogs/constantiner.php
В общем, ключевое слово "с умом".
2008-01-22 @ 18:49
Комментарий от: iv [Посетитель] Email · http://www.bezier.ru
Костя, после твоего доклада про события я понял прелесть баблинга, и у меня зарубцевался еще один шрам в мозгу.
После ряда вариантов пришел к такому способу использования: в MVC генерю события своего класса ViewEvent, с баблингом. Если на каком-то этапе (например в корне компонента) считаю, что событие дальше никому не нужно слать, просто делаю stopPropagation()

Дошедшие события отлавливаю в классе Main, отдаю на обработку в контроллер (а иногда Main делаю контроллером) и дальше рассылаются уже события контроллера, на которые подписываю Model и View.

В итоге получается очень симпатичная архитектура.

Еще раз спасибо за доклад.
2008-01-23 @ 12:46
Комментарий от: iv [Посетитель] Email · http://www.bezier.ru
Не оч понятно написал. Во так:
в MVC в элементах View генерю события своего класса ViewEvent, с баблингом.
2008-01-23 @ 12:49
Комментарий от: Konstantin Kovalev [Учаснег] Email · http://riapriority.com/blogs/constantiner.php
Я понял твою мысль. Я как раз бабблинг изучаю чтобы сделать легковесное MVC-решение. Типа Cairngorm'а без синглтонов :)
2008-01-23 @ 12:54
Комментарий от: iv [Посетитель] Email · http://www.bezier.ru
Да, и прелесть в том, что Main слушает сам себя. Или контроллер слушает Main. В любом случае, контроллеру не нужно знать что из себя представляет view и что в нем творится. Он просто в одном месте подписывается на те события view, которые хочет слышать.
2008-01-23 @ 12:58
Комментарий от: Slon_vsapogah [Посетитель] Email · http://riapriority.com/blogs/slon-vsapogah.php
Иногда возникает необходимость вызывать логику контроллера и из невизуальных объектов. В этом случае приходится использовать дополнительный способ кроме баблинга?

Не в тему: в Cairngorm есть странная особенность - имена команд должны быть уникальными:
addCommand( LoginEvent.EVENT_LOGIN, LoginCommand );
addCommand( LogoutEvent.EVENT_LOGOUT, LogoutCommand );


Т.е. если у вас в различных классах кастомных событий одинаковые значения констант-событий (SiteLoginEvent.EVENT_LOGIN == MessengerLoginEvent.EVENT_LOGIN) то диспатчер-синглтон расскажет вам про эту "ошибку" еще на стадии добавления команд через addCommand. Получается, нужно как в C писать различные префиксы типа public static const EVENT_LOGIN = "SITE_LOGIN_EVENT_EVENT_LOGIN"; :( Альтернатива - подпилить Gairngorm.

В принципе, механизм глобального диспатчера и кучи контроллеров меня очень даже устраивает своей универсальностью если бы не это.
2008-01-24 @ 11:54
Комментарий от: Vertex [Посетитель] Email
Ты видимо имел ввиду типы событий замапленных на команды должны быть уникальными. Да, ты прав но это можно обойти. Если вдуматься, то самому Cairngorm евенту не нужна константа с типом, так как он и так уникален и замаплен исключительно на одну уникальную команду. В это контексте, создавая в коде инстанс такого евента мы можем уйти от явной передачи типа в конструктор. Трюк в том, что нагрузку по обявлению типов мы переносим в Cairngorm контроллер, где они вынуждены быть уникальными.
Конструктор евента:
GetMeetingOrganizersEvent(){
super(MyController.EVENT_GET_MEETING_ORGANIZERS);
}
В контроллере:
addCommand(MyController.EVENT_GET_MEETING_ORGANIZERS, GetMeetingOrganizersCommand);
Здесь тоже конечно есть нюансы, например непривычно немного, также по первости чтобы узнать тип нужно залезать внутрь евента, но потом привыкаешь просто привыкаешь испольщовать Cairngorm naming convention и лезть сразу в нужный пакет.
Если я правильно понял проблему :)
2008-01-24 @ 14:45

Оставить комментарий


Ваш email адрес. (Не будет показан на сайте.)

Ваш URL будет показан.
ПлохоПревосходно
:!: :?: :idea: :) :D :p B) ;) :> :roll: :oops: :| :-/ :( :'( |-| :>> :yes: ;D :P :)) 88| :. :no: XX( :lalala: :crazy: >:XX
(Заменить прерывания строк на <br />)
(Имя, email и сайт)
(Разрешить пользователям посылать вам сообщения (ваш email не отображается).)
3 + 2 + 7 - 1?
antispam test

Вы можете использовать OpenID чтобы предоставить ваше имя, email и url.