2010-03-21 45 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事件处理方法将被调用.. 我希望,这个解决您的问题..