2010-03-21 8 views
1

J'ai une application flexible et j'ai intégré un fichier flash (SWF) en utilisant <mx:SWFLoader>. Il y a un bouton "Quitter" sur le fichier Flash. Je veux être capable de gérer l'événement de clic de bouton sur l'application flexible.Contrôlez l'application flex à partir du contrôle Flash intégré

Donc quand on clique sur ce bouton dans le fichier flash, je veux effectuer une action dans l'application flex parent. Comment puis-je faire ceci? Merci!

Répondre

0

Vous pouvez le faire si l'événement de "bulles" flash. Lorsque vous décomposez l'événement à partir de Flash, faites ceci:

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

alors vous devriez être en mesure de le capturer dans Flex aucun problème, avec:

addEventListener("myEventName", handler); 

... aussi longtemps que addEventListener est appelé un composant au niveau ou au-dessus du SWFLoader.

Si vous ne pouvez pas modifier le fichier SWF Flash ou il est une boîte noire complète, vous pouvez simplement enregistrer un gestionnaire MouseEvent.CLICK avec useCapture = true, et vérifiez si elle est le bouton droit:

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 
} 

Espoir cela aide, Lance

+0

@viatroops: hey, cela ne fonctionne pas. J'ai accès à la fla. Le fla exécute cette ligne de code 'dispatchEvent (new Event (" myEvent "), true));' et j'ai un gestionnaire d'événements 'swfloader_completeHandler' sur le SWFLoader dans Flex. Dans cette méthode, j'ai 'swfloader.addEventListener (" myEvent ", nextStepFunction);'. Mais maintenant, quand je clique sur le bouton de sortie dans le fichier SWF (quand il est intégré dans l'application Flex), rien ne se passe. Est-ce que j'ai fait quelque chose de mal? – Aishwar

+0

Essayez-le donc dispatchEvent ressemble à ceci: 'dispatchEvent (new Event (" myEvent ", true));' à la place de 'dispatchEvent (new Event (" myEvent "), true))', et essayez de définir useCapture sur le listener à true, comme ceci: 'addEventListener (" myEventName ", handler, true, 0, true);'. Faites-moi savoir si cela fonctionne. –

+0

@viatroops. Oups, c'était une faute de frappe. Oui, c'est ce que j'avais pour dispatchEvent. J'ai essayé le second addEventListener, et cela n'a pas fonctionné non plus. – Aishwar

0

Vous pouvez le faire en utilisant Loader Class dans AS3 (dans le script flex). Même vous pouvez le faire dynamiquement. dans 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"); 
} 

Lorsque myButton est cliqué, la méthode de gestionnaire d'événements onBtnClick sera appelé .. je l'espère, ce résoudre votre problème ..