组件显示在设计视图中而不是在应用程序启动

问题描述:

这是发生了什么: 我有一个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函数中放置一个断点,并查看它是否曾被调用过。如果没有,那么它在你的布线中的某处,处理程序没有被调用。你可以在这里发布更多的代码来获得帮助。

+0

感谢您的回复。 'Login_getStateHandler'被调用并且状态确实发生变化,因为状态发生变化,显示'includeIn ='loggedin''的元素,但其中的组件不显示。我真的不知道其他代码是否会有用,因为状态确实发生了变化(无需发布代码以实现它),并且组件'LogoSearch'中没有定义任何状态。如果你知道我应该展示什么代码,请告诉我。再次感谢。 – user1315134 2012-08-11 15:04:15

+0

您可能想要分配组件的宽度和高度属性并查看它是否正确显示。取决于组件的写法,这样的时候可能无法确定它需要的宽度和高度。您还可以在NavigatorContent中添加一些带有文本的标签,并查看它是否显示。如果两者均未显示,则意味着ViewStack没有正确选择NavigatorContent。在这种情况下,'invalidateDisplayList()'和'invalidateProperties()'可能会派上用场。 – 2012-08-11 17:51:21

+0

感谢您的回复,听起来很有希望。我尝试用标签替换组件,但标签没有显示。 – user1315134 2012-08-12 09:06:07