Повторители Flex и EventListeners - PullRequest
       27

Повторители Flex и EventListeners

2 голосов
/ 30 января 2009

На первый взгляд, элемент управления Repeater выглядит чрезвычайно мощным, но теперь у меня возникают вторые мысли.

Проблема под рукой: Добавление слушателей событий для детей

Объект Repeater связан и проходит через ArrayCollection, создавая новые дочерние элементы Vbox для каждого элемента. Теперь для каждого дочернего объекта объект Repeater будет запускать событие «repeat», где я испытываю желание добавить список событий (для событий мыши). Пока проблем нет, но что произойдет, когда ArrayCollection изменится, как мне удалить EventListeners для всех старых детей? Есть ли массив детей, содержащих мои экземпляры Vbox, которые я пропускаю в документах? Хорошо ли очищаются списки событий, когда объект, к которому они прикреплены, уничтожен?

-C кодер потерян в flex / actionscript

Ответы [ 2 ]

6 голосов
/ 30 января 2009

Я бы не стал использовать Repeaters полностью. С точки зрения производительности они очень медленные, потому что элементы часто уничтожаются и воссоздаются. Вам лучше использовать элемент управления на основе списка и реализовать itemRenderer.

Слушатели событий по умолчанию являются надежными ссылками, поэтому, если вы не удалите прослушиватели событий, это предотвратит сбор мусора для объекта. Вы можете использовать необязательный 5-й параметр в addEventListener, называемый «weakReference», и установить значение true, чтобы добавить прослушиватель событий, который не помешает GC.

Чтобы лучше справляться с событиями в компоненте itemRender, вы можете реализовать интерфейс IDropInListItemRenderer. Это даст вам доступ к «listData», у которого есть свойство «owner», которое является фактическим объектом List. В вашем itemRenderer отправьте собственное событие, содержащее необходимые данные, через владельца. Если вы добавите прослушиватель событий в элемент управления List после его создания, вы можете выполнить обработку событий в компоненте, содержащем элемент управления.

0 голосов
/ 30 января 2009

Хорошо, похоже, мне нужно было указать vbox идентификатор, после чего я смог получить доступ к этому идентификатору как к массиву vbox. После добавления обработчика событий я смог использовать currentTarget.getRepeaterItem () события в качестве ссылки на объект в ArrayCollection.

Очистка обработчиков событий осуществлялась путем зацикливания массива vbox и удаления обработчиков.

Не слишком беспокоит производительность, так как элементов мало, и они редко меняются во время работы программы, хотя эти элементы будут отличаться почти при каждом запуске. Если это не нужно излишне разрушать и воссоздавать предметы, это не должно быть большой проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...