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

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

以上は、Actionscriptでイベントリスナーを追加する方法の1つです。 デフォルトでは、コールバック関数は、 という名前のイベントとタイプのイベントを持つ引数を持つ必要があります。引数なしでこの関数を宣言する方法はあります です:引数がないコールバック関数を持つイベントリスナーを追加する

private function uploadCompleteHandler():void {} 

編集:これは、MXMLで引数なしでイベントハンドラを追加することが可能です。 1人の学生が知りたかったので、なぜactionscriptで同じことをすることができないのですか?

+0

なぜあなたはそれをしたいですか? –

+0

mxmlに引数なしでイベントハンドラを追加することは可能です。 1人の学生が知りたかったので、同じ をactionscriptでどうしてできないのですか? – dharm0us

答えて

8

理由はMXMLで、あなたが書いたもの、実際にハンドラではないということです、ハンドラ内で実行されますものです。 -keep-generated-actionscriptフラグを指定してコンパイルすると(右クリックしてプロジェクトのプロパティを開き、Flexコンパイラを選択し、-keep-generated-actionscriptをAdditionalコンパイラ引数に追加すると)、コンパイラがそのイベント用のハンドラを作成し、本体がmxmlで書いたもので構成されていることを確認します。

あなたが何か持っているのであれば:

click="doSomething();" 

をあなたはすでにそれはあなたがaddEventHandlerを使用するときは次のように渡しているメソッド参照ではありません、あなたが実際にそこに命令を与えていることに気づくことができます。二番目のパラメータではありません

this.addEventListener(MouseEvent.CLICK, myComponent_Click); 

お知らせ:

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

そして、どこかのイベントリスナーを追加し、同じファイル内:

次に、あなたのように生成されたファイルに何かを持っているでしょう関数の結果、それは関数参照です。なぜなら、関数呼び出しが存在しないことを示すかっこがあり、私たちの特定の関数はゲッターではないからです。

click="doSomething(event);" 

はMXMLイベントの値に書き込みが何であれ:

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

あなたもあなたの方法にイベントパラメータを渡すことができます。

また、のようなMXMLでより多くのコールを、指定することができます(それが正しい用語であるかどうかはわかりません)は、actionscriptイベントの生成ハンドラの本体になります。

3

いいえ、イベントリスナーとして登録しようとすると、イベントが発生したときにランタイム例外が発生します。

あなたは、イベントオブジェクトなしで直接あなたのハンドラを呼び出すできるように、次の構文を使用できます

private function uploadCompleteHandler(event:Event = null):void {} 
関連する問題