Frage

muss ich Zugang TopBox Enkel und bestimmen, ob sie sind Buttons oder nicht.

Diese Funktion unten (danke Flextras.com) packt TopBox unmittelbaren Kinder, die die HBoxen sind. Wie gehe ich eine Ebene zu TopBox Enkel senken? Oder ist der einzige Weg, dies zu tun, wird diese Funktion auf jeden HBox laufen?

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>
War es hilfreich?

Lösung

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

Um es aussieht weniger einschüchternd, kann man anonyme Funktionen mit einfachen ersetzen, aber die Idee sollte klar sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top