2011-01-02 9 views
0

各ループに対して作成したすべての要素にeventlistenerを追加したいと思います。 しかし、ちょうどeventlistenerは、最新の作成された要素でのみ動作します。AS3 For Eachでイベントリスナーを追加

for eachループで作成されたすべての要素にイベントリスナーを追加するにはどうすればよいですか?

これは私のコードです:

 for each(var showCase:ShowCaseItem in _bllShowCase.arrShowCase) 
     { 
      var listItem:ListItemShowCase = new ListItemShowCase(showCase); 
      listItem.y = yPos; 
      listItem.addEventListener("ITEMDELETED", refreshShowCaseItems); 
      this.addChild(listItem); 

      yPos += 20; 

     } 

私はあなたが私の質問を理解してほしいです。

ありがとう、Vincent

+1

このコードは私にはうまく見えます。おそらくrefreshShowCaseItems()にイベントを発生させたバグではなく、配列内の最後のバグにのみ作用するバグがありますか? – Herms

+0

@Hermsは良い点をもたらします...多分refreshShowCaseItems関数を提供することができます。 – Nicholas

答えて

0

このコードでは機能的に問題はありません。それは動作するはずです。

問題はおそらく他の場所にあります。

表示リストには各オブジェクトへの参照が格納されるため、GCはリスナーをクリーンアップしてはいけませんが、各オブジェクトを配列にキャッシングすることができます。この方法では、このコードブロックの外にある各オブジェクトへの参照があることを確認できます。

private var _list:Array = new Array(); 

for each(var item:Object in list) 
{ 
    _list.push(listItem); 
} 
+0

そうです、DisplayListはDisplayObjectの参照を保持しているので、GCはそれらを収集すべきではありません。配列内の参照をキャッシュする必要はありません。それは参照を削除するより多くの責任を追加する、メモリリークがあるでしょう。 – DexTer

+0

@ Bhavesh.Bagadiyaそうかもしれませんが、DisplayListを参照マネージャとして使用することはお勧めできません。これらのオブジェクトのコレクションは、とにかく必要になる可能性があります。 – Nicholas

関連する問題