Het weergaveoverzicht doorlopen

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Zoals u weet, heeft het weergaveoverzicht een boomstructuur. Aan de bovenkant van de structuur bevindt zich het werkgebied, dat meerdere weergaveobjecten kan bevatten. Deze weergaveobjecten, die zelf weergaveobjectcontainers zijn, kunnen andere weergaveobjecten of weergaveobjectcontainers bevatten.

De klasse DisplayObjectContainer bevat eigenschappen en methoden voor het doorlopen van het weergaveoverzicht, dit gebeurt via de lijsten met onderliggende items van de weergaveobjectcontainers. Neem bijvoorbeeld de volgende code. Deze code voegt de twee weergaveobjecten title en pict aan het object container toe (dit is een Sprite en de klasse Sprite breidt de klasse DisplayObjectContainer uit):

var container:Sprite = new Sprite(); 
var title:TextField = new TextField(); 
title.text = "Hello"; 
var pict:Loader = new Loader(); 
var url:URLRequest = new URLRequest("banana.jpg"); 
pict.load(url); 
pict.name = "banana loader"; 
container.addChild(title); 
container.addChild(pict);

De methode getChildAt() retourneert het onderliggende element dat zich op een opgegeven indexpositie in het weergaveoverzicht bevindt:

trace(container.getChildAt(0) is TextField); // true

U hebt ook toegang tot onderliggende objecten via de naam. Elk weergaveobject heeft een eigenschapnaam, en als u deze niet toewijst, wijst Flash Player of AIR een standaardwaarde toe, zoals 'instance1'. De volgende code toont bijvoorbeeld hoe de methode getChildByName() moet worden gebruikt om toegang te verkrijgen tot een onderliggend weergaveobject met de naam 'banana loader':

trace(container.getChildByName("banana loader") is Loader); // true

Het gebruik van de methode getChildByName() resulteert mogelijk in langzamere prestaties dan wanneer u de methode getChildAt() zou gebruiken.

Omdat een weergaveobjectcontainer andere weergaveobjectcontainers als onderliggende objecten in zijn weergaveoverzicht kan bevatten, kunt u het volledige weergaveoverzicht van de toepassing als een boomstructuur doorlopen. In het voorgaande codefragment bevat het object pict één geladen onderliggend weergaveobject (de bitmap), zodra de laadbewerking van het Loader-object pict is voltooid. Als u toegang tot dit weergaveobject bitmap wilt, schrijft u pict.getChildAt(0). U kunt ook container.getChildAt(0).getChildAt(0) schrijven, omdat container.getChildAt(0) == pict.

De volgende functie biedt de gewenste uitvoer trace() van het weergaveoverzicht van een weergaveobjectcontainer:

function traceDisplayList(container:DisplayObjectContainer,                                                indentString:String = ""):void 
{ 
    var child:DisplayObject; 
    for (var i:uint=0; i < container.numChildren; i++) 
    { 
        child = container.getChildAt(i); 
        trace(indentString, child, child.name);  
        if (container.getChildAt(i) is DisplayObjectContainer) 
        { 
            traceDisplayList(DisplayObjectContainer(child), indentString + "    ") 
        } 
    } 
}

Adobe Flex

Als u Flex gebruikt, moet u weten dat Flex veel componenten weergaveobjectklassen definieert en dat deze klasse de toegangsmethoden tot het weergaveoverzicht van de klasse DisplayObjectContainer overschrijft. De klasse Container van het pakket mx.core overschrijft bijvoorbeeld de methode addChild() en andere methoden van de klasse DisplayObjectContainer (die de klasse Container uitbreidt). In het geval van de methode addChild() wordt de methode op een dergelijke manier door de klasse overschreven, dat u niet alle typen weergaveobjecten aan een instantie Container in Flex kunt toevoegen. De overschreven methode vereist in dit geval dat het onderliggende object dat u wilt toevoegen, een objecttype mx.core.UIComponent is.