2010-03-21 101 views
1

我有一個柔性應用程序,並使用<mx:SWFLoader>在其中嵌入了一個閃存(SWF)文件。 Flash文件上有一個「退出」按鈕。我希望能夠處理Flex應用程序上的按鈕單擊事件。從嵌入式Flash控制器控制柔性應用程序

因此,當單擊Flash文件中的該按鈕時,我想在父Flex應用程序中執行一個操作。我怎樣才能做到這一點?謝謝!

回答

0

你可以做到這一點,如果事件從閃光「氣泡」。當你發送從Flash的情況下,這樣做:

dispatchEvent(new Event("myEventName", true)); // that 'true' for bubbles, in the constructor 

那麼你應該能夠捕捉到它的Flex沒有問題,有:

addEventListener("myEventName", handler); 

...只要addEventListener被稱爲上SWFLoader上或以上的組件。

如果您不能修改Flash的SWF,或者它是一個完整的黑盒子,那麼你可以註冊一個MouseEvent.CLICK處理與useCapture = true,並檢查它是否是一個正確的按鈕:

swfLoader.addEventListener(MouseEvent.CLICK, swfLoader_clickHandler, true, 0, true); 

protected function swfLoader_clickHandler(event:MouseEvent):void 
{ 
    if (event.target.name == "some_way_to_identify_the_button") 
     // do X 
} 

希望這有助於, 蘭斯

+0

@viatroops:哎,這沒有奏效。我確實可以訪問fla。 fla執行下面這行代碼:dispatchEvent(new Event(「myEvent」),true));'我在Flex中的SWFLoader上有一個'swfloader_completeHandler'事件處理程序。在這個方法中,我有'swfloader.addEventListener(「myEvent」,nextStepFunction);'。但是現在,當我點擊swf文件中的退出按鈕(當它嵌入到flex應用程序中時),什麼也沒有發生。我做錯什麼了嗎? – Aishwar 2010-03-21 08:31:25

+0

嘗試它,因此dispatchEvent看起來像這樣:'dispatchEvent(new Event(「myEvent」,true));'而不是this'dispatchEvent(new Event(「myEvent」),true))',並嘗試設置useCapture listener爲true,如下所示:'addEventListener(「myEventName」,處理程序,true,0,true);'。讓我知道這是否有效。 – 2010-03-21 09:56:17

+0

@viatroops。糟糕,這是一個錯字。是的,那是我爲dispatchEvent所做的。我嘗試了第二個addEventListener,那也沒有工作。 – Aishwar 2010-03-21 10:23:43

0

你可以使用AS3中的加載程序類(在Flex腳本中)。即使你可以動態地做到這一點。 在MXML

<mx:SWFLoader id="myLoader" width="500" source="swf/kabin42.swf" 
          complete="initSwf();"/> 


private function initNestedAppProps2():void { 
    var loadedMc:MovieClip = MovieClip(myLoader.content); 
    loadedMc= MovieClip(myLoader2.content); 
    //access the button with instance name myButton: 
    loadedMc.myButton.addEventListener(MouseEvent.CLICK, onBtnClick); 
} 

private function onBtnClick(event:MouseEvent):void{ 
    Alert.show("button clicked 2"); 
} 

當按下myButton的,onBtnClick事件處理方法將被調用.. 我希望,這個解決您的問題..