Как я могу восстановить объект, который запускает событие eventListener в AS3? - PullRequest
0 голосов
/ 20 марта 2012

Как я могу получить доступ к объекту, который запускает событие eventListener?

Допустим, у меня есть MC:

var element = new MovieClip();

, у которого есть список событий:

element.addEventListener(MouseEvent.CLICK, elementEventHandler);

И затем, в обработчике событий, я хочу добавить что-то в мой mc:

function elementEventHandler(event:MouseEvent):void
{
    var b1:balloon = new balloon("ballon1"); //this is another class.

    event.target.addChild(b1);//this doesn't work.
}

Вот чего я хочу достичь ... Восстановить объект, который вызвал событие, а затем делать с ним безумные вещи (в этом примере добавить еще один объект).

Если у кого-то есть идеи, заранее спасибо!

pd: да, я знаю, что могу напрямую использовать элемент var в этом фрагменте, но в реальном коде я генерирую mcs в цикле, согласно xml-файлу.

Ответы [ 2 ]

1 голос
/ 20 марта 2012
function elementEventHandler(event:MouseEvent):void
{
    // use the as-operator to cast the target into the class you need
    var element:DisplayObjectContainer = e.target as DisplayObjectContainer;

    // if the cast fails, element will be null, then we bail
    if(!element) return;

    // then, create your child and add it
    var b1:balloon = new balloon("ballon1");
    element.addChild(b1);
}
0 голосов
/ 20 марта 2012

Причина, по которой вы получаете ошибку, возможно, заключается в том, что событие приходит не напрямую от element, а от одного из его дочерних объектов.

"click" - это всплывающее событие.

Ознакомьтесь с потоком событий в спецификации событий уровня 3 DOM, чтобы понять, как работают фазы захвата, цели и всплытия:

http://www.w3.org/TR/DOM-Level-3-Events/#dom-event-architecture

Итак, вот что я хотел бы сделать:

function elementEventHandler(event:MouseEvent):void
{
    if (event.target != event.currentTarget)
        // If event is not from "element", ignore it.
        return;

    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...