![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2008
Сообщений: 109
|
Цитата:
![]() |
|
|||||
|
саморазвозящаяся колбаса:
public class MyEventer extends EventDispatcher { private var _event:Event public function MyEventer(event:Event) { _event = event; } public function dispatch():void { dispatchEvent(_event); } } Добавлено через 3 минуты event это одноразовая посылка, создается по месту исходя из конкретных условий, после доставки и извлечения информации убивается eventDispatcher универсальный рассылщик таких посылок какая польза от объедения их в одном флаконе не очень понятно |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
1. быстрее создать объект с 5-ю свойствами, чем с 10-тью.
2. если в обработчике нам нужны только данные о событии, то зачем туда пихать методы и свойства EventDispatcher? колбасу развозит среда выполнения флэш, т.е. FlashPlayer, а не связка из Event+EventDispatcher |
|
|||||
|
Modus ponens
|
Цитата:
- 599 вызовов обработчика собыя будут "мимо". - один лиший слушатель при перечислении всех слушателей, которое это событие должно оповестить. - лишняя логика в обработчике событя по вычислению, а кто же его вызвал. Но, опять же, с другой стороны никто не говорит, что события круче всего, а все остальное - плохо, если вам такой функционал не нужен, реализуйте сами что-нибудь поскромнее. Вот такой например вариант "подписки" на изменеие ширины: public function set widthListeners(value:Vector.<Function>):void { for each (var f:Function in value) { if (_widthListeners.indexOf(f) < 0) _widthListeners.push(f); } } public override function set width(value:Number):void { for each (var f:Function in _widthListeners) { f(super.width, value); } super.width = value; }
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 01.11.2009 в 20:38. |
|
|||||
|
Цитата:
Цитата:
__________________
я могу стать всем, если только захочу Последний раз редактировалось Felicast; 01.11.2009 в 21:54. |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 130
|
Цитата:
Felicast, есть недоделанное ТЗ на прораммку для собственных нужд, чтобы реализовать нужно построить архитектуру. Если строить ее без учета модели событий AS3 - как привык, то потом переделывать придется. з.ы. Никак не могу отвыкнуть от событийной модели с++ билдера, делфи - с отсутствием подписки и написания кода в самих методах-обработчиках. Здесь это приемники событий, разрозненные по своим объектам и связанные с событием только через EventDispathcer. А он сам - то ли просто механизм подписки-оповещения, то ли такой же объект-подписчик, как и приемники событий.. Последний раз редактировалось TommyLee; 02.11.2009 в 13:28. |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Методы обработчики были в AS2 (onEnterFrame, onRelease, итп)
Слава богу что от них ушли. EventDispatсher - это базовый объект рассылающий события, Sprite, MovieClip - тоже рассылают события, но они не наследники EventDispatсher, просто реализуют IEventDispatсher при добавлении addEventListener к какому нибудь объекту-диспатчеру мы сопоставляем событие и ф-цию-обработчик. (внутри это может выгледять, как двумерный хэш список, или хэш список массивов ф-ции.. или еще как..) В момент наступления события ( внутреннего, вроде клика, или пользовательского в момент вызова dispathEvent) объект проходится по списку слушателей и вызывает ассоциированные ф-ции передавая им возникшее событие (данные)
__________________
Отряд Котовскага Последний раз редактировалось Котяра; 02.11.2009 в 14:02. |
|
|||||
|
Modus ponens
|
Цитата:
Цитата:
А по поводу таких обработчиков, как в AS2 - а почему такая увереннось, что это плохо? Я, например, обратил внимание, что в 50% случаев мне этот событийный объект не нужен, т.е. не используется в функции-обработчике. Вообще вуглядит глупо, вызвали функцию с аргументом, и вообще проигнорировали аргумент. Вообще, было бы конечно идеально, если бы разработчик мог сам решать какая сигнатура должна быть у слушателя, но, раз уж у нас арсенал средств ограничен, то уж что есть... ![]()
__________________
Hell is the possibility of sanity |
|
|||||
|
Цитата:
возьмем обработку клика по кнопке: делфи: procedure TForm1.buttonClick(Sender: TObject);
begin
MessageDlg('Hello', mtInformation, [mbOk], 0);
end;
{где-то инициализируем кнопку}
myButtun.OnClick := buttonClick;
private void buttonClicked(object sender, EventArgs evArgs)
{
MessageBox.Show("Кнопка была нажата");
}
/*где-то инициализируем кнопку*/
myButtun.Click += new System.EventHandler(buttonClicked);
private function clickHandler(event:MouseEvent):void { trace("hello"); } /*где-то инициализируем кнопку*/ myButton.addEventListener(MouseEvent.CLICK, clickHandler); ![]() (единственное в делфи может быть один обработчик (хотя можнт и ошибаюсь), а в as3 сколько угодно)
__________________
я могу стать всем, если только захочу |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Цитата:
А вот что единая ф-ция обработчик это плохо, я уверен на 100%. дело даже не в передаче эвента в ф-цию обработчик, а в куче неудобств при переопределении одной единственной onRelease, переделегировании событий и.т.п. да и оставшиеся 50% ( по вашим рассчётам), требующие данных события - это совсем не мало)
__________________
Отряд Котовскага |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:24. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|