2012-03-19 49 views
0

如何訪問觸發eventListener事件的對象?如何恢復在AS3中觸發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元素,但是在真正的代碼中,我根據一個xml文件生成了一個循環中的mcs。

回答

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

嘿,謝謝你的回覆。我得到了一個運行時錯誤:Loader類沒有實現這個方法,在flash.display :: Loader/addChild()看來,addchild不能用於DisplayObjectContainer,對嗎? – 2012-03-19 21:13:39

+0

是的,我在AS3中很新。我檢查了引用,現在我明白DisplayObjectContainer是所有可視容器類的基類。所以我不知道爲什麼我得到這個錯誤,因爲addchild()是一個DisplayObjectContainer方法。 – 2012-03-19 21:40:59

+1

我想通了!我使用「event.currentTarget作爲DisplayObjectContainer」而不是「event.target作爲DisplayObjectContainer」。現在我試圖瞭解其中的差異。非常感謝! – 2012-03-19 21:52:03

0

你得到一個錯誤的原因可能是該事件不是直接從element從它的子對象的一個​​未來,而是。

"click"是冒泡事件。 DOM級別

退房事件流3活動符合規範,瞭解捕獲,目標和冒泡階段是如何工作的:

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; 

    ... 
} 
相關問題