如何访问触发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。
答案 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;
...
}