Форум 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=145627)

Zebestov 14.10.2010 16:12

Свое всплывание событий.
 
Всем привет. Тут мелькала эта идея, но я шота не могу понять как сделать.
Входящие данные:

1. события разные. 99% — уже имеющийся в AS3 набор.
2. всплывать событиям придется в иерархии объектов типа EventDispatcher (?)
3. надо сохранить target

нид хелп короч.

passertm 14.10.2010 16:15

не совсем понятна задача.
чем EventDispatcher плохо?
да target не получается заменять. мне тоже это показалось странным.
нужно будет свои евенты наследовать и реализовывать.

dimarik 14.10.2010 16:18

Всплытие нативно поддерживается только DisplayObject'ом (участвует его #parent). Можете построить аналогичную систему или стройте иерархию, используя базовыми классами Shape, Sprite, etc.

Zebestov 14.10.2010 17:40

Так вот и спрашиваю, как построить аналогичную систему =)
DisplayObject — крайний случай.

etc 14.10.2010 18:10

Собственно, target можно хранить статически во время всплытия.

zuxul 14.10.2010 18:30

Чтобы сохранить таргет (только для своих классов Event-ов)
1) override get target
2) override clone

BlooDHounD 14.10.2010 18:31

etc нельзя. тогда произойдёт колапс, когда одно событие рождает другое.

etc 14.10.2010 18:41

Цитата:

Сообщение от BlooDHounD (Сообщение 942728)
etc нельзя. тогда произойдёт колапс, когда одно событие рождает другое.

А, ну да, простите.

Zebestov 14.10.2010 20:31

Теперь target всегда сохраняется при клонировании и его не нужно явно передавать в конструктор MyEvent()

Код AS3:

package {
 
        import flash.events.Event;
 
        /**
        * ...
        * @author Vadim BELLinSKY
        */

 
        public class MyEvent extends Event {
 
                private var _target:Object;
 
                public function MyEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, target:Object = null):void        {
                        super(type, bubbles, cancelable);
                        this._target = target;
                }
 
                override public function clone():Event {
                        return new MyEvent(super.type, super.bubbles, super.cancelable, this.target);
                }
 
                override public function get target():Object {
                        return this._target ? this._target : super.target;
                }
        }
}

UPD
Вообще все затевается ради всплывания событий в дереве моделей... я начинаю думать, что это лишнее.
Зачем какой-то модели следить не за непосредственно подопечными, а и за их подопечными.
Ну т.е. если меняется дочерняя модель — событие CHANGE, на которое реагирет изменениями текущая модель, что вызывает тот же CHANGE уже для его родителя.
Поправьте, есличё.

BlooDHounD 14.10.2010 21:45

из последний 3х предложений не понял ничего.


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

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