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.