2012-02-27 3 views
2

Как я могу получить все <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 группы.

Как я могу это сделать?

ответ

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

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

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; 
} 
Смежные вопросы