我在将我的 TabNavigator 从 Flex 3 迁移到 Flex 4.5 时遇到了问题。下面的代码是最简版本,但是第二个子元素无法正确创建:
<?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,其第二个选项卡被选中,但没有内容,而不是预期的“内容二”标签。 navigator.selectedIndex = 1;
的指令只是为了方便,即使在启动后使用鼠标选择第二个选项卡,也会出现错误。
现在来说有趣的部分:如果我执行以下任何一项操作,则会创建第二个子级:
- 在content_one上设置
creationPolicy="all"
(这是预期的), - 注释掉
content_one.enabled = true
, - 删除content_one上的
enabled="false"
, - 从content_one中删除
mouseOver="over()"
(这真的非常奇怪,因为处理程序从未被调用)
这真的是Flex的bug吗,还是我漏掉了什么东西? 我正在使用Flex 4.5.0.20967,所有这些都在Flex 3.5中运行良好。
谢谢。