2010-02-24 4 views
1

Je sais qu'avec ExternalInterface, nous pouvons enregistrer des fonctions ActionScript qui seront appelables à partir de JavaScript, mais je veux enregistrer la fonction actionscript pour une classe qui a plusieurs instances créées dans l'application. Donc, comment il va reconnaître quelle fonction de script d'action objet sera appelée à partir du script Java.Notifications Javascript à Flex sur plusieurs objets

Par exemple:

1) Java script: A la fonction javaScripAlert() qui appelle la fonction de script d'action showAlert();

Ie testSwf.alert (valeur);

fonction

javaScripAlert (valeur) {

TestSwf.alert(); 

}

2) classe ABC a fonction de rappel showAlert (valeur); Il enregistre la fonction de rappel "showAlert" dans la classe ..

Ie. Interface externe. addCallback ("alert", showAlert);

3) TestApplication: en ce que j'ai créé plusieurs objets de calss ABC

Ie

I ont créé objet multiple de type ABC dans le TestApplication . donc quand j'appelle la fonction javaScript javaScripAlert() de HTML, elle appelle seulement la fonction showAlert (valeur) de l'objet "abc3" et non pour les autres objets abc1, abc2.

Il en est de même de toute façon que la fonction d'un autre objet soit également appelée à ce moment-là.

Merci & Cordialement, Sanjay Ruparelia

Répondre

0

Chaque objet Actionscript qui appelle ExternalInterface.addCallback("myCallback", myCallback) remplacera le rappel javascript. Donc, le dernier objet Actionscript à appeler qui gagne.

Exemple:

TestObject.mxml

<?xml version="1.0" encoding="utf-8"?> 
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" 
    initialize="registerCallback()"> 
    <mx:Script> 
     <![CDATA[ 
      import flash.external.ExternalInterface; 

      protected function registerCallback():void 
      { 
       if (ExternalInterface.available) 
       { 
        ExternalInterface.addCallback("myCallback", myCallback); 
       } 
      } 

      protected function myCallback():void 
      { 
       trace(this); 
      } 

      protected function callJavascript():void 
      { 
       ExternalInterface.call("myCallback"); 
      } 
     ]]> 
    </mx:Script> 
    <mx:Panel width="100%" height="100%" click="callJavascript()"/> 
</mx:Canvas> 

Javascript dans HTML

function myCallback() 
{ 
    getFlashContent().myCallback(); 
} 
function getFlashContent() 
{ 
    return document.getElementById("MyApp"); 
} 

App échantillon

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*"> 

    <mx:Panel id="panel" width="100%" height="100%" > 
     <local:TestObject width="100%" height="50"/> 
     <local:TestObject width="100%" height="50"/> 
     <local:TestObject width="100%" height="50"/> 
    </mx:Panel> 

</mx:Application> 

sortie (en cliquant)

MyApp.panel.TestObject34 
MyApp.panel.TestObject34 
MyApp.panel.TestObject34 

Une solution de contournement consisterait à avoir tous ces ExternalInterface.addCallback("myCallback", myCallback); appels dans une classe Manager/Util (quelque chose comme singleton). Ensuite, assurez-vous de ne l'ajouter qu'une seule fois. Ensuite, vous pouvez passer des éléments individuels dans la méthode.

Lance

+0

Merci beaucoup, Il aide beaucoup Sanjay –

+0

Pourriez-vous marquer comme correct si cela a fonctionné? –

Questions connexes