Получить всех детей указанного типа независимо от уровня - PullRequest
2 голосов
/ 27 февраля 2012

Как я могу получить все <s:Images/> из файла MXML независимо от того, где они находятся в иерархии этого файла?

Итак, для этого:

<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 ]

3 голосов
/ 27 февраля 2012
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 голос
/ 27 февраля 2012

Рекурсивно, в псевдокоде

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);
    }
}

Вместо IContainer, так как у вас есть Flex 4 в ваших тегах, вам нужно взглянуть на интерфейсы для этого как: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/core/IVisualElementContainer.html

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