Зацикливание элементов внутри элемента в Flex - PullRequest
2 голосов
/ 21 октября 2011

У меня есть следующая функция в Flex 4:

protected function initEventHandlers():void
        {
            imageContainer.addEventListener(DragEvent.DRAG_ENTER, acceptDrag);
            imageContainer.addEventListener(DragEvent.DRAG_DROP, handleDrop);

            img_1.addEventListener(MouseEvent.MOUSE_DOWN, handleDrag);
            img_2.addEventListener(MouseEvent.MOUSE_DOWN, handleDrag);
            img_3.addEventListener(MouseEvent.MOUSE_DOWN, handleDrag);
            img_4.addEventListener(MouseEvent.MOUSE_DOWN, handleDrag);
        }

Мне не понравился внешний вид этого кода. Четыре изображения объявлены внутри моего приложения следующим образом:

<s:HGroup y="10" width="650" horizontalAlign="center" horizontalCenter="6">
        <s:Image width="80" height="80" source="images/1.jpg" id="img_1" />     
        <s:Image width="80" height="80" source="images/2.jpg" id="img_2" />
        <s:Image width="80" height="80" source="images/3.jpeg" id="img_3" />
        <s:Image width="80" height="80" source="images/4.jpg" id="img_4" />
</s:HGroup>

Нет ли способа перебрать каждое изображение в hgroup и добавить обработчик событий?

Примерно так:

for(image in hgroup) { 
    image.addEventlistener(MouseEvent.MOUSE_DOWN, handleDrag); 

}

Мой учитель сказал мне, что это невозможно, но в случае более 10 изображений я не могу себе представить, чтобы это делалось для каждого изображения отдельно. Должен быть лучший способ сделать это, не так ли?

Заранее спасибо!

1 Ответ

6 голосов
/ 21 октября 2011

Ваш учитель не прав!

Дайте HGroup идентификатор (например, imageGroup).

Тогда сделайте это:

var numElements:int = imageGroup.numElements;
for (var i:int = 0; i<numElements; i++) {
    var image:Image= imageGroup.getElementAt(i) as Image;
    if (image) image.addEventlistener(MouseEvent.MOUSE_DOWN, handleDrag); 
}
...