Компонент TextArea имеет значение null для события applicationComplete - PullRequest
1 голос
/ 12 июня 2010

У меня странная проблема (странная, потому что она специфична для одного компонента) с applicationComplete в довольно простом приложении. Все компоненты пользовательского интерфейса объявлены в MXML. Я могу получить к ним доступ в applicationComplete, но не в компоненте spark.components.TextArea с именем taStatus здесь; в обработчике нет значения.

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 Ответ

4 голосов
/ 12 июня 2010

Это потому, что TextArea находится в дочернем элементе TabNavigator, который не является первым дочерним, поэтому по умолчанию он не создается, пока пользователь не откроет эту вкладку.

Вы можете либо дождаться, пока пользовательоткрывает эту вкладку, чтобы сделать все, что вам нужно сделать, чтобы настроить TextArea или изменить политику создания дочерних элементов в TabNavigator, чтобы создавать все его дочерние элементы при запуске, а не ждать их нажатия.

Чтобы сделать это,вам нужно установить свойство creationPolicy на TabNavigator в значение "all".

...