获取指定类型的所有子级,无论级别如何

时间:2012-02-27 16:15:44

标签: flex flex4

如何从MXML文件中获取所有<s:Images/>,无论它们在该文件的层次结构中的哪个位置?

所以对此:

<s:Group>
    <s:Image/>
    <s:VGroup>
        <s:Image/>
        <s:Image/>
        <s:Image/>
        <s:HGroup>
            <s:Image/>
            <s:Image/>
        </s:HGroup>
    </s:VGroup>
</s:Group>

我想从第一个组获取所有图像,无论它们是否包含在组本身或VGroup或HGroup中。

我该怎么办呢?

2 个答案:

答案 0 :(得分:3)

filterImages([], this);
protected function filterImages(array:Array, child:Object):Array
{
    for(var i:int = 0; i < child.numChildren; i++)
    {
        if(child.hasOwnProperty("getElementAt"))
        {
            var subChild:Object = child.getElementAt(i);
            if(subChild is Image)
            {
                array.push(subChild);
            }else
            {
                filterImages(array, subChild);
            }
        }
    }
    return array;
}

答案 1 :(得分:1)

递归地,以伪代码

myFunc(IContainer root):void
{
    for(i=0;i<root.numChildren;i++)
    {
        curChild = root.getChildAt(i);
        if(curChild is Image)
            doSomethingElse(curChild);
        if(curChild is IContainer)
            myFunc(curChild);
    }
}

由于您的标签中有Flex 4,因此您需要查看接口,而不是IContainer: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/core/IVisualElementContainer.html