如何恢复在AS3中触发eventListener事件的对象?

时间:2012-03-19 20:38:30

标签: actionscript-3 event-listener

如何访问触发eventListener事件的对象?

我们说我有一个mc:

var element = new MovieClip();

有一个eventlistener:

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元素,但在实际代码中我根据xml文件在循环中生成mcs。

2 个答案:

答案 0 :(得分:1)

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);
}

答案 1 :(得分:0)

您收到错误的原因可能是该事件不是直接来自element,而是来自其后代对象之一。

"click"是一个冒泡的事件。

查看DOM Level 3 Events规范中的事件流,以了解捕获,目标和冒泡阶段的工作原理:

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;

    ...
}