2010-12-25 9 views
10

ボタンのループセットを作成し、いくつかのイベントを追加したいが、匿名関数は同じです。 あなたは私がこれをどのように作ることができます知っています。..同じ引数ではなくループ内での無名関数の作成

for(var i:int=0;i<5;i++) 
{ 
    var button:SimpleButton = new SimpleButton(...); 
    ... 
    button.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void 
    { 
     trace(i); 
    }); 
} 

... 

そして、私の代わりに4,4,4,4のクリックボタンから0,1,2,3 ...をトレースしたい:私は、サンプルコードを書くのか?

+0

も参照してください。http://stackoverflow.com/questions/422784/how-to-fix-closure-problem-in-actionscript-3-as3 –

答えて

19

問題は、ActionScriptがクロージャをサポートしていないことです。

つまり、変数iは、関数ごとに独自のコンテキストにコピーされません。すべての機能は、同じインスタンスのiを参照します。

詳しいここ情報: http://flex.sys-con.com/node/309329

これを行うために、あなたは関数を生成する機能が必要になります。

public function makeFunction(i:int):Function { 
    return function(event:MouseEvent):void { trace(i); } 
} 

、あなたは自分のコンテキストで、関数の新しいインスタンスを作成します。

button.addEventListener(MouseEvent.CLICK, makeFunction(i)); 
関連する問題