2012-08-11 58 views
0

這是發生了什麼: 我有一個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後顯示。

回答

0

要縮小問題範圍,您可以從代碼中刪除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

相關問題