2011-01-02 5 views
0

Я хотел бы добавить eventlistener ко всем элементам, которые я создаю в a для каждого цикла. Но, скорее всего, eventlister работает только с последним созданным элементом.AS3 Добавить прослушиватель событий для каждого

Как добавить прослушиватель событий к каждому элементу, созданному в каждом цикле?

Это мой код:

 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; 

     } 

Я надеюсь, что вы понимаете мой вопрос.

Спасибо, Винсент

+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 не должен их собирать. Нет необходимости кэшировать ссылки в массиве. Это добавит больше ответственности за удаление ссылки else, произойдет утечка памяти. – DexTer

+0

@ Bhavesh.Bagadiya Это может быть, но я не думаю, что это хорошая идея использовать DisplayList в качестве справочного менеджера. В любом случае коллекция этих объектов более чем вероятно понадобится. – Nicholas

Смежные вопросы