2010-10-05 4 views
0

J'essaie d'apprendre à utiliser les événements personnalisés dans Flex.Erreur Flex sur un événement personnalisé simple lorsqu'il est implémenté dans Actionscript (mais pas en MXML)

Je suis tutoriel Oliver Merk trouvé ici: blog

L'événement personnalisé fonctionne si je mets en œuvre à l'aide de MXML dans l'application principale. Mais, si j'utilise actionscript, alors j'obtiens l'erreur 1119: Accès de la propriété ADD_PRODUCT possiblement indéfinie à travers une référence avec le type statique Classe.

Mon événement: Dans le sous-répertoire des événements, j'ai:

package events { 

   import flash.events.Event; 

   public class AddProductEvent extends Event { 

      public var productName:String; 

      public function AddProductEvent(type:String, productName:String) { 

         super(type); 
         this.productName = productName; 

      } 

      override public function clone():Event { 
         return new AddProductEvent(type, productName); 
      } 

   } 
} 

Dans le composant, j'ai un RadioButtonGroup

<mx:RadioButtonGroup id="choicesRadioButtonGroup" itemClick="onButtonClick()"/> 



private function onButtonClick():void { 
      var myEventObj:Event = new AddProductEvent("addProduct", "Flex T-shirt"); 
      dispatchEvent(myEventObj); 
     } 

Ce sont les métadonnées dans le composant et la déclaration d'importation:

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

import events.AddProductEvent; 

Dans l'application principale, j'ai:

import events.AddProductEvent; 

private function onAddProduct(event:AddProductEvent):void { 
mx.controls.Alert.show('Attached data was ' + event.productName); 
} 

Si je mets en œuvre le composant dans l'application principale comme ceci:

<visualcomponent:PopWindow addProduct="onAddProduct(event)" /> 

alors tout fonctionne.

Si je mets en œuvre le composant dans l'application principale dans actionscript comme ça, je reçois une erreur:

public function clickHandler2(event:MouseEvent):void { 

    if(event.currentTarget.selected){popWindow = new PopWindow; 
     queryBuilder(event.currentTarget); 
     PopUpManager.addPopUp(popWindow, my_view, false); 
     PopUpManager.centerPopUp(popWindow); 

      popWindow.addEventListener(AddProductEvent.ADD_PRODUCT, onAddProduct);} 

    } 

Je reçois l'erreur sur la ligne addEventListener. Qu'est-ce que je fais mal? Aucun conseil?

Merci.

-Laxmidi

Répondre

2

Votre classe AddProductEvent ne semble pas exposer une chaîne statique publique appelée ADD_PRODUCT qui a la valeur « addProduct » qui est ce qu'il semble que vous essayez de faire.

+0

Salut Gregor Kiddie, Merci pour votre message. Je suis toujours en train d'apprendre sur les événements personnalisés. Je ne comprends pas ce que j'ai besoin de changer. J'essaie de faire en sorte que mon événement renvoie la chaîne productName à l'application principale. Aucune suggestion? Je vous remercie. – Laxmidi

+0

Salut Gregor, j'ai ajouté public static const ADD_PRODUCT: String = "addProduct"; dans l'événement après la classe publique AddProductEvent étend Événement {... et maintenant cela fonctionne. Je vous remercie! – Laxmidi

Questions connexes