对于Flex的显示列表,从最顶级的舞台开始,到Application的层级关系是:
Stage -> SystemManager -> Application
Flex程序的生命就是上面这样的顺序展开的。
上面记述的关系,可以用下面的代码来简单验证:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
name="I'm Application"
creationComplete="init()" >
<fx:Script>
<![CDATA[
public function init():void{
//this是Application
txt.text = this.name +"\r\n";
//application的父亲是SystemManager
txt.text += this.parent +"\r\n";
//SystemManager的父亲是Stage
txt.text += this.parent.parent +"\r\n";
//Stage是最顶级,没有父亲
txt.text += this.parent.parent.parent +"\r\n";
}
]]>
</fx:Script>
<s:TextArea id="txt" x="53" y="59" width="526" height="254"/>
</s:Application>
执行结果:
I'm Application //这是Application实例本身
[object _TestParent_mx_managers_SystemManager] //Application的父亲是SystemManager实例
[object Stage] //SystemManager的父亲是Stage实例
null //Stage没有父亲,也就是说Stage就是最顶级的DisplayObject了
>引申知识点:
(1). Stage是由FlashPlayer在执行swf文件的时候创建的实例。
(2). SystemManager类 隐性地被Flex框架所定义(在Appliction父类中被[Frame]元数据标签所定义)。
FlexBuilder编译Application程序时候,自动把SystemManager类的AS代码编译到swf文件当中,充当程序入口类(也就是主类,FlashPlayer会找到入口类,并自动执行其构造函数)。Flex程序的生命实际是从SystemManager实例的构造函数开始的。
(3). Application就是上面代码中的<s:Appliction>标签所代表的代码,也就是我们编写的程序。