2011-01-02 3 views
0

각 루프에 대해 생성 한 모든 요소에 eventlistener를 추가하고 싶습니다. 그러나 apperently eventlistener는 최신 생성 된 요소에서만 작동합니다.AS3 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