组件显示在设计视图中而不是在应用程序启动
问题描述:
这是发生了什么: 我有一个TabNavigator的有以下标签:组件显示在设计视图中而不是在应用程序启动
<s:NavigatorContent width="100%" height="100%" label="Add a logo" includeIn="loggedin">
<components:LogoSearch />
</s:NavigatorContent>
当我状态更改为“的loggedIn”与下面的代码:
protected function Login_getStateHandler(event:Event):void
{
this.currentState = "loggedin";
}
navigatorContent显示组件“LogoSearch”,但在设计视图中显示,但是它在切换状态时显示。
“LogoSearch”中没有定义状态,应显示...?
当我将tabnavigator包含在“正常”和“已登录”中,然后将状态更改为“已登录”,组件“LogoSearch”显示。当我只在“登录”中显示tabnavigator时,将状态更改为“登录”,组件“LogoSearch”不显示。
任何想法为什么会发生这种情况?我根本没有在flex的亲,所以随时指出我的错误。谢谢。
按照Tianzhen Lin的建议,尝试使用invalidateDisplayList()和invalidateProperties()。仍然没有显示。
<s:NavigatorContent width="100%" height="100%" label="Add a logo" includeIn="loggedin" id="AddLogoTab" >
<s:Label text="test" id="test" />
</s:NavigatorContent>
和:
protected function Login_getStateRegisterHandler(event:Event):void
{
this.currentState = "register";
test.invalidateDisplayList();
test.invalidateProperties();
test.validateNow();
AddLogoTab.invalidateDisplayList();
AddLogoTab.invalidateProperties();
AddLogoTab.validateNow();
}
无论我做什么,在NavigatorContent的内容不会statechange后显示。
答
要缩小问题范围,您可以从代码中删除includeIn="loggedin"
开始,这至少可以确保您的组件正常显示。
接下来,我会在您的Login_getStateHandler
函数中放置一个断点,并查看它是否曾被调用过。如果没有,那么它在你的布线中的某处,处理程序没有被调用。你可以在这里发布更多的代码来获得帮助。
感谢您的回复。 'Login_getStateHandler'被调用并且状态确实发生变化,因为状态发生变化,显示'includeIn ='loggedin''的元素,但其中的组件不显示。我真的不知道其他代码是否会有用,因为状态确实发生了变化(无需发布代码以实现它),并且组件'LogoSearch'中没有定义任何状态。如果你知道我应该展示什么代码,请告诉我。再次感谢。 – user1315134 2012-08-11 15:04:15
您可能想要分配组件的宽度和高度属性并查看它是否正确显示。取决于组件的写法,这样的时候可能无法确定它需要的宽度和高度。您还可以在NavigatorContent中添加一些带有文本的标签,并查看它是否显示。如果两者均未显示,则意味着ViewStack没有正确选择NavigatorContent。在这种情况下,'invalidateDisplayList()'和'invalidateProperties()'可能会派上用场。 – 2012-08-11 17:51:21
感谢您的回复,听起来很有希望。我尝试用标签替换组件,但标签没有显示。 – user1315134 2012-08-12 09:06:07