2009-01-23 9 views

Répondre

7

Vous pouvez appeler directement dans Application en utilisant le static Application.application.yourPublicMethodName() ou .yourPublicPropertyName = n, mais vous pouvez également envisager d'utiliser le framework d'événements, afin de conserver un couplage lâche de vos composants. Comme votre composant est par définition un répartiteur d'événements, vous pouvez simplement y envoyer un événement et demander à votre classe Application d'écouter cet événement.

Dans MXML, qui ressemble à quelque chose comme ça, pour la classe de composants:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300"> 

    <mx:Metadata> 
     [Event(name="buttonClicked", type="flash.events.Event")] 
    </mx:Metadata> 

    <mx:Script> 
     <![CDATA[ 

      public var someValue:int = 0; 

      private function buttonClick():void 
      { 
       someValue = 1; 
       dispatchEvent(new Event("buttonClicked")); 
      } 

     ]]> 
    </mx:Script> 

    <mx:Button label="Click Me" click="buttonClick()" /> 

</mx:Canvas> 

... et pour l'application, comme ceci:

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

    <mx:Script> 
     <![CDATA[ 

      import mx.controls.Alert; 

      private function myComponent_buttonClicked(event:Event):void 
      { 
       Alert.show(event.currentTarget.someValue.toString()); 
      } 

     ]]> 
    </mx:Script> 

    <local:MyComponent buttonClicked="myComponent_buttonClicked(event)" /> 

</mx:Application> 

La balise de métadonnées de l'événement dans le composant class indique au compilateur que le composant distribue un événement de type flash.events.Event ("buttonClicked"), qui l'expose comme un événement sur la balise MyComponent; Ensuite, tout ce que vous avez à faire est de câbler un écouteur pour cet événement, et grâce à la propriété currentTarget de l'événement, vous avez accès à toutes les données publiques du composant.

Je pensais juste offrir une alternative intéressante pour toi. J'espère que cela aide!

0

l'ai; juste nécessaire pour importer mx.core.Application;

Questions connexes