在Flex中的元素内部循环元素

时间:2011-10-21 15:42:07

标签: flex actionscript mxml flexbuilder flex4.5

我在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中的每个图像并添加eventhandler?

这样的事情:

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

}

我的老师告诉我这是不可能的,但是对于10多张图片,我无法想象为每张图片分别做这件事。必须有更好的方法来做到这一点,不是吗?

提前致谢!

1 个答案:

答案 0 :(得分:6)

你的老师错了!

给HGroup一个id(例如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); 
}