2009-11-12 2 views
2

Я хотел бы поместить eventListener в длину ArrayCollection, но я не знаю, как это сделать.Просмотр свойства длины ArrayCollection в AS3/Flex

Я хочу сделать это, потому что я хочу, чтобы код выполнялся, когда определенное количество вещей находится в определенном массиве ArrayCollection. Я хочу, чтобы Flex ожидал выполнения этого кода над следующим объектом до тех пор, пока свойство length не вернется к приемлемому уровню. Я думаю, что я должен делать это с событиями, а не с циклом while, который сидит там, носящий NOOPs навсегда (что я не знаю, как это сделать).

Пожалуйста, помогите, и спасибо заранее. SO была большой помощью до сих пор.

ответ

0

Вы можете просто добавить прослушиватель событий 'collectionChange' и проверить, изменился ли массив ArrayCollection.length со времени предыдущего события. (Для сравнения вам нужно сохранить статическую или экземплярную копию длины ArrayCollection.)

Другая мысль состоит в том, чтобы создать свою собственную длинуChangedEvent, расширить ArrayCollection, переопределить свойство length и искать для вызова любых прослушивателей lengthChangedEvent в сеттере. Затем используйте расширенный ArrayCollection вместо базового класса везде, где вам нужно прослушать событие. Это не сработает, потому что свойство length доступно только для чтения, и нет настройки для переопределения. Вам придется переопределить каждый метод, который мог бы добавлять или удалять элементы из ArrayCollection и тестировать/вызывать прослушиватель lengthChangedEvent в каждом случае.

3

ArrayCollection отправит событие "collectionChange", когда его элементы изменились. Таким образом, вы можете прослушивать это событие и проверять свойство «длина» каждый раз при отправке события. В качестве альтернативы вы также можете просто привязать свойство длины через BindingUtils.bindSetter();