Flex 3: как получить доступ к внукам компонента - PullRequest
0 голосов
/ 21 октября 2010

Мне нужно получить доступ к внукам topBox и определить, являются ли они кнопками или нет.

Эта функция ниже (спасибо Flextras.com) захватывает непосредственных потомков topBox, которые являются HBox.Как перейти на один уровень ниже к внукам topBox?Или единственный способ сделать это - запустить эту функцию на каждом HBox?

for (var i : int =0; i<topBox.numChildren; i++){
  var child : DisplayObject = topBox.getChildAt(i);
  var myButton:UIComponent = child as UIComponent;
    blah blah               
} 


<mx:VBox id="topBox">

    <mx:HBox id="Hbox1">
        <mx:Button id="button1"
            label="button1" 
            click="myClickHandler"/>

        <mx:Button id="button2" 
            label="button2" 
           click="myClickHandler"/>
    </mx:HBox>

   <mx:HBox id="Hbox2">
        <mx:Button id="button3"
            label="button3" 
            click="myClickHandler"/>

        <mx:Button id="button4" 
            label="button4" 
           click="myClickHandler"/>
    </mx:HBox>

<mx:VBox>

1 Ответ

2 голосов
/ 21 октября 2010
//declare child access function
private function processChildren(target:DisplayObjectContainer, handler:Function):void
{
    for (var i:int = target.numChildren - 1; i >= 0; i--)
    {
        handler(target.getChildAt(i));
    }
}

//call it with handler as anonymous function (may be plain one as well)
processChildren(topBox, function(target:DisplayObjectContainer):void
   {
       processChildren(target, function(target:DisplayObjectContainer):void
       {
           //this will be called on grandchildren
           if (target is Button)
           {
               //do something
           }
       });
   });

Чтобы он выглядел менее пугающим, можно заменить анонимные функции на простые, но идея должна быть ясной.

...