1

かなり単純なアプリケーションのapplicationCompleteで、奇妙な問題が発生します(1つのコンポーネントに固有であるため奇妙です)。すべてのUIコンポーネントはMXMLで宣言されています。これらはすべてapplicationCompleteでアクセスできますが、ここではtaStatusという名前のspark.components.TextAreaコンポーネントにはアクセスできません。ハンドラーでは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:nullオブジェクト参照のプロパティまたはメソッドにアクセスできません。したがって、taStatusはnullです...このTextAreaの何が特別なのですか?

Update 2010-06-12 02:53 NavigatorContent(タブ)を他のすべてのタブの上に移動すると、TextAreasが時間どおりにインスタンス化されます。すべてのコンポーネントが確実に作成されているため、非常に奇妙です。私はそれらを見ることができます。

4

1 に答える 1

4

これは、TextAreaが最初の子ではないTabNavigatorの子にあるためです。したがって、デフォルトでは、ユーザーがそのタブを開くまでインスタンス化されません。

オプションは、ユーザーがそのタブを開いてTextAreaを設定するために必要なことを行うまで待つか、TabNavigatorの子作成ポリシーを変更して、クリックされるのを待つのではなく、起動時にすべての子を作成することです。

これを行うには、TabNavigatorのcreationPolicyプロパティを「all」に設定する必要があります。

于 2010-06-11T23:53:23.883 に答える