Flex 3: Как получить доступ к внукам компонента

StackOverflow https://stackoverflow.com/questions/3990570

  •  10-10-2019
  •  | 
  •  

Вопрос

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

Эта функция ниже (спасибо Flextras.com) захватывает ближайших детей Topbox, которые являются Hboxes. Как мне пойти на один уровень ниже до внуков Топбокс? Или единственный способ сделать это - запустить эту функцию на каждом 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>
Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top