ApplicationAmplete事件上的TextArea组件为null

时间:2010-06-11 23:14:37

标签: flex actionscript-3 flash-builder

在一个相当简单的应用程序中,我有一个奇怪的问题(奇怪,因为它特定于一个组件)与applicationComplete。所有UI组件都在MXML中声明。我可以在applicationComplete中访问它们,但不能在 spark.components.TextArea 组件中访问它们,在此处命名为 taStatus ;它在处理程序中为null。

MXML看起来有点像这样(有很多其他组件,但没什么特别的)

<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="710" minHeight="640" applicationComplete="onApplicationComplete(event)" width="710" height="640">
    <mx:TabNavigator left="15" right="15" top="15" bottom="340" paddingTop="0">
        <s:NavigatorContent label="General" width="100%" height="100%">
            <s:Label x="93" y="71" text="Label" id="lblTest"/>
        </s:NavigatorContent>
        <s:NavigatorContent label="Status" width="100%" height="100%">
            <s:TextArea id="taStatus" width="100%" height="100%" text="Startup." editable="false"/>
        </s:NavigatorContent>
    </mx:TabNavigator>
    <fx:Script source="main.as" />
</s:Application>

这是main.as中的处理程序

protected function onApplicationComplete(event: FlexEvent) : void
{
    lblTest.text = 'abc789';    // OK
    taStatus.text = 'abc789';   // Fail 
}

TypeError:错误#1009:无法访问空对象引用的属性或方法。所以taStatus是null ...这个TextArea有什么特别之处?

更新 2010-06-12 02:53 将NavigatorContent(选项卡)移动到所有其他选项卡上方会突然使TextAreas按时实例化。很奇怪,因为所有组件都是绝对正在创建的;我可以看到它们。

1 个答案:

答案 0 :(得分:4)

这是因为TextArea是TabNavigator的子节点,它不是第一个子节点,所以默认情况下它不会被实例化,直到用户打开该选项卡。

您的选择是等到用户打开该选项卡以执行您需要执行的操作以设置TextArea或更改TabNavigator上的子创建策略以在启动时创建其所有子项而不是等待它们点击。

为此,您需要将TabNavigator上的creationPolicy属性设置为“all”。