У меня возникла проблема при переносе моего TabNavigator из Flex 3 в Flex 4.5. Изменившийся до минимума следующий код приведет к ошибке, а именно, что второй дочерний элемент TabNavigator не будет создан должным образом:
<?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"
>
<fx:Script>
<![CDATA[
protected function over():void
{
trace('over');
}
protected function content_one_init():void
{
content_one.enabled = true;
navigator.selectedIndex = 1;
}
]]>
</fx:Script>
<mx:TabNavigator
id="navigator"
creationPolicy="auto"
width="100%" height="100%"
>
<mx:VBox
id="content_one"
enabled="false"
creationComplete="content_one_init()"
label="One"
mouseOver="over()"
/>
<mx:VBox label="Two">
<mx:Label text="Content Two" />
</mx:VBox>
</mx:TabNavigator>
</s:Application>
То, что я вижу при запуске, - это TabNavigator с выбранной второй вкладкой, но не содержание, а не ожидаемая метка "Content Two". Инструкция navigator.selectedIndex = 1;
предназначена только для удобства, ошибка появляется также, если вы выберете вторую вкладку с помощью мыши после запуска.
Теперь придет интересная часть: если я делаю одно из следующего, создается второй ребенок:
- установите
creationPolicy="all"
в content_one (это ожидается), - комментарий
content_one.enabled = true
, - удалите
enabled="false"
в content_one, - удалите
mouseOver="over()"
из content_one (это действительно действительно странно, поскольку обработчик так и не вызван)
Является ли это ошибкой Flex, или есть что-то, что мне не хватает? Я использую Flex 4.5.0.20967, и все это хорошо работает в Flex 3.5.
Спасибо.