2009-06-10 5 views
0
fileReference.addEventListener(Event.COMPLETE, uploadCompleteHandler); 

    private function uploadCompleteHandler(event:Event):void {} 

Oben ist eine Möglichkeit, einen Ereignis-Listener in Actionscript hinzuzufügen. Standardmäßig muss die Callback-Funktion ein Argument mit Name Ereignis und Typ Event haben. Gibt es eine Möglichkeit, diese Funktion ohne Argumente zu erklären:Flex Hinzufügen von Ereignis-Listenern mit Callback-Funktionen, die keine Argumente haben

private function uploadCompleteHandler():void {} 

Edit: Es ist möglich, einen Event-Handler ohne Argumente in mxml hinzuzufügen. So wollte ein Student wissen, warum ist es nicht möglich, das gleiche in ActionScript zu tun?

+0

Warum möchten Sie das tun? –

+0

Es ist möglich, einen Event-Handler ohne Argumente in mxml hinzuzufügen. So ein Student wollte wissen, warum ist es nicht möglich, das gleiche in ActionScript zu tun? – dharm0us

Antwort

8

Der Grund, dass in mxml ist, was Sie schreiben ist eigentlich nicht der Handler, ist das, was in der Prozedur ausgeführt wird . Wenn Sie mit dem -keep-generated-actionScript-Flag kompilieren (Um es in Flex Builder zu setzen, klicken Sie mit der rechten Maustaste, um die Projekteigenschaften zu öffnen, Flex Compiler auszuwählen und -keep-generated-actionskript zu den Zusätzlichen Compiler-Argumenten hinzuzufügen) generierte Quelle für Ihre Komponente, dass der Compiler einen Handler für dieses Ereignis erstellt hat, und der Hauptteil besteht aus dem, was Sie in mxml geschrieben haben.

Also, wenn Sie so etwas wie:

click="doSomething();" 

können Sie bereits feststellen, dass Sie tatsächlich eine Anweisung gibt zu geben, das ist keine Methode Referenz Sie vorbei, wie wenn man addEventHandler verwenden.

Dann werden Sie wie in der generierten Datei etwas haben:

private function myComponent_Click(evt : MouseEvent) : void 
{ 
    doSomething(); 
} 

Und woanders in der gleichen Datei Hörer das Hinzufügen des Ereignisses:

this.addEventListener(MouseEvent.CLICK, myComponent_Click); 

Hinweis der zweite Parameter nicht Ein Funktionsergebnis, es ist eine Funktionsreferenz, weil die Klammern, die einen Funktionsaufruf bezeichnen, fehlen und unsere spezielle Funktion auch kein Getter ist.

Sie können auch mehrere Anrufe in mxml angeben, wie:

click="doSomething(); doSomethingElse();" 

Sie können sogar den Ereignisparameter auf Ihre Methode übergeben:

click="doSomething(event);" 

Was auch immer Sie in den Wert des mxml Ereignis schreiben (Nicht sicher, dass es der richtige zu verwendende Ausdruck ist) wird der Hauptteil des generierten Handlers für das Actionscript-Ereignis.

3

Nein, Sie erhalten eine Laufzeitausnahme, wenn das Ereignis ausgelöst wird, wenn Sie versuchen, es als Ereignislistener zu registrieren.

Sie die folgende Syntax verwenden können Ihre Handler direkt ohne Ereignisobjekt zu ermöglichen Aufruf:

private function uploadCompleteHandler(event:Event = null):void {}