Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Организация работы событий (http://www.flasher.ru/forum/showthread.php?t=140798)

switcher! 10.06.2010 18:20

Цитата:

Сообщение от Psycho Tiger (Сообщение 914515)
Событие клонируется при нативном EventDispatcher::dispatchEvent`е.

Событие клонируется при повторном диспатче использованного эвента. При обычном распространении события - оно не клонируется. И не важно вызвал метод Sprite или EventDispatcher.

dimarik 10.06.2010 18:27

Вы имеете ввиду, если вызвать метод EventDispatcher#dispatchEvent, то внутри него произойдет event.clone();

Psycho Tiger 10.06.2010 18:30

Цитата:

Сообщение от switcher! (Сообщение 914521)
Событие клонируется при повторном диспатче использованного эвента. При обычном распространении события - оно не клонируется. И не важно вызвал метод Sprite или EventDispatcher.

Вы мои слова повторили. Только вот у Sprite`а нету метода dispatchEvent.
И вот только оно клонируется всегда, даже при первом вызове dispatchEvent`а.

Короче, то что сказал dimarik.

switcher! 10.06.2010 18:51

Цитата:

Сообщение от Psycho Tiger (Сообщение 914524)
Вы мои слова повторили

можно на "ты". Я флеймовую темку почитал по этому поводу. Просветился -)))

Цитата:

Сообщение от Psycho Tiger (Сообщение 914524)
Только вот у Sprite`а нету метода dispatchEvent.

я где-то сказал, что Sprite определяет dispatchEvent?

Цитата:

Сообщение от Psycho Tiger (Сообщение 914524)
И вот только оно клонируется всегда, даже при первом вызове dispatchEvent`а.

нет, клон это новый объект. Как тогда объяснить это, если dispatchEvent всегда создает клон:
Код AS3:

package
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.EventDispatcher;
 
        public class Example extends Sprite {
                private var _event:Event;
 
                function Example() {
                        super();
 
                        this._event = new Event(Event.CHANGE);
 
                        var s3:EventDispatcher = new EventDispatcher();
                        s3.addEventListener(Event.CHANGE, this._test1);
                        s3.dispatchEvent(this._event);
                }
 
                private function _test1(e:Event):void {
                        trace(this._event === e); //true
                }
        }
}

Цитата:

Сообщение от Psycho Tiger (Сообщение 914524)
Короче, то что сказал dimarik.

имо, dimarik задал вопрос, а не выдвинул утверждение.

Psycho Tiger 10.06.2010 19:05

Ого, и вправду. Ошибался, спасибо, буду знать. А второе событие уже клон.

Видимо событие несёт в себе какой-то флаг а-ля isUsed, и раздваяйца оно только если событие уже было использовано.

Цитата:

я где-то сказал, что Sprite определяет dispatchEvent?
Не так понял. Во флеше все методы виртуальные, поэтому эта фраза по сути смысловой нагрузки для меня не несёт. Вот и додумал =)

switcher! 10.06.2010 20:10

Цитата:

Сообщение от Psycho Tiger (Сообщение 914536)
А второе событие уже клон.

ага.
Собственно, под эгидой этого топика я надеялся избавиться от геттеров в сложных событиях (наступление которого ожидают несколько объектов/обработчиков). Но, видимо - не судьба.
"Не клонируется", раз... "Не клонируется", два... "Не клонируется", три... Пр...:D

P.S. оффтоп. Даный топик имеет тег "Лень", по которому в поиске пробивается только этот топик. Забавно ))

Psycho Tiger 10.06.2010 20:24

switcher, геттеры (ридонли) - это лишь перестраховка в 99% случаев, чтобы случайно что-нибудь не изменить - чисто по запарке.

switcher! 10.06.2010 20:59

разумеется, но я эту "перестраховку" вывел в стандарт. В простых нотификациях можно и открытыми переменными обойтись, ибо плевать, что обработчик с объектом события сделает. Оно (событие) ему только и предназначается.
Однако в сложных, когда подписчиков много, я не хочу держать в голове: что я могу, а что не могу делать с полями объекта события. Я хочу быть уверенным, что объект как неизменный штамп события дойдет до адресата в том виде, в каком он изначально описывает событие.

А так, конечно, можно все переменные пабликами делать, из детей родителями управлять и т.д. => главное, "чисто по запарке" не запутаться :)

P.S. Я не занимаюсь миссионерством. Если кого-то сей подход не устраивает, пожалуйста, пожалуйста...

dimarik 10.06.2010 21:59

Клонирование события происходит при наличии у диспетчера parent и если выставлен флаг bubbles?

switcher! 10.06.2010 22:50

неа, пока установлен только один случай, когда происходит клонирование события. Это повторный диспатч того же объекта события.


Часовой пояс GMT +4, время: 08:06.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.