2010-08-05 3 views
0

Mon code ressemble:Pourquoi n'est pas autorisé à accéder à une fonction membre à partir de mon gestionnaire d'événements local dans ActionScript (Flex4)?

private function createExportButton() : void { 
     var exportButton : Button = new Button(); 
     exportButton.label = "Export"; 
     exportButton.x = 600; 
     exportButton.y = 10; 
     exportButton.addEventListener(MouseEvent.CLICK, function 
              clickHandler(e : MouseEvent) : void { 
      this.export(); 
     }); 
     super.addElement(exportButton); 
    } 

L'erreur est:

* TypeError: Erreur # 1006: l'exportation est pas une fonction. à la fonction /() [C: \ Utilisateurs \ Utilisateur \ Adobe Flash Builder 4 \ agriculturalAdministration \ src \ certificat \ un \ CertificateBuilder1.as: 150] * Quelqu'un peut-il m'expliquer pourquoi cela? Merci d'avance!

Répondre

4

clickHandler() n'est pas une fonction membre, elle n'appartient à aucune classe. C'est une fonction anonyme. Par conséquent, il n'appartient pas à une instance. Cependant, si je me souviens bien, vous devriez pouvoir vous référer aux variables de la portée englobante (comme exportButton) de l'intérieur. Dans ce cas, vous pouvez attribuer la référence de classe à une variable et l'utiliser au lieu de this:

var exportButton:Button = new Button(); 
var this_:SomeClass = this; 
... 
addEventListener(..., function clickHandler(e:MouseEvent):void { 
    this_.export(); 
}); 

Ou, vous pouvez juste faire clickHandler() une fonction membre:

private function clickHandler(e:MouseEvent):void 
{ 
    this.export(); 
} 

... 
{ 
    addEventListener(..., clickHandler); 
} 
+0

est ici l'obligatoire +1 que l'OP a oublié de vous donner ..! – Amarghosh

Questions connexes