2012-02-06 3 views
1

IVは、このような...addEventListenerでステートメントをどのように渡しますか?

target.addEventListener("pComp", rakeSoil(target)); 

としてActionScriptでのaddEventListenerイベントを通じて引数を渡すしようとしてきたが、私はエラーを取得します。

IVはグーグルしようとしましたが、運:

{ 
     var target:EventDispatcher = ...; 
     Function rakeSoil = function (e:Event):void 
     { 
      // handle target 
     } 

     target.addEventListener("pComp", rakeSoil); 
    } 

rakeSoilは、(第一級関数である:あなたはこれが何をしたいですどのように:)

答えて

2

試してみてください。

target.addEventListener ("pComp", targetListener); 

... 

private function targetListener (event:Event):void { 

    rakeSoil (event.currentTarget); 

} 
+0

あなたが能力を持っている場合は、rakeSoilにイベントを受け取り、currentTargetを取り込むのではなく、currentTargetにアクセスするだけです。 –

0

をすれば返信をありがとう/

またはクロージャ)を呼び出すと、イベントが送出されると、そのイベントが呼び出され、その中の 'target'にアクセスできます。

EDIT:

Closure (computer science)

4

を見てくださいターゲットは、すでにイベントの一部として渡され、いずれかevent.currentTargetまたはevent.targetはあなたが望むものになります。

他の何かを渡したい場合は、カスタムイベントを作成します。カスタムイベントにプロパティを追加します。イベントリスナーとして追加のメソッドを追加

0

私は常に匿名関数は、彼らが価値があるよりも、多くの問題であることがわかってきました。標準的なイベントハンドラのコードレイアウトに従うだけです。それはより正式だとフロントまで少し手間がかかりますが、そこにはあいまいさがありません、あなたは今から一年、それに戻ったとき、それははるかに読みやすいです(頭掻く期間を短縮):

// Target extends EventDispatcher 
private var target:Target; 

public function listenToTarget(); 
{ 
    target = new Target(); 
    target.addEventListener("pComp", pCompHandler); 
} 

private function pCompHandler(event:Event):void 
{ 
    target.rakeSoil(); 
} 

を今、が、私はそれをより詳しく見ています、なぜあなたはこのオブジェクトを持っていて、ターゲットがそれ自身で内部的に処理できるべきであるかをしていますか?

関連する問題