2008-10-16 61 views
3

我對當前項目(將在Flash播放器中運行的Flex應用程序)有一個要求,以便在窗體上顯示組件的任意子集,同時基於組件的某些方面隱藏所有其他組件應用狀態。大約有十幾種不同的文本框和下拉菜單,但有些基於先前輸入的用戶數據變得無關緊要,我們不希望在獲得此特定表單時顯示這些內容。每次顯示這個表單時,我都需要顯示這些組件的許多排列中的任何一個。動態定位的Flex組件

我想確定解決這個問題的最好方法是什麼。我應該創建一個Canvas(或其他容器),並在其上包含所有必需的控件,然後在不需要的設置上設置visible = false?問題就變成了確保佈局看起來不錯。我不希望那裏存在隱藏控制的差距。

我想過的其他選擇只是有一個機制,可以動態實例化TextInput或CheckBox等組件,然後調用container.addChild(control)以構建組件,而不必擔心差距問題。

這似乎是一個在flex中有慣用解決方案的問題,但我不知道它是什麼。這些想法都不是很好,所以我想知道其他人是否有更好的主意。

回答

4

我不知道這是否是一個好的解決方案,但是當我處於完全相同的情況時,我基本上做了第一種方法。設置visible = false並設置includeInLayout = false以防止您所談論的那些「空白」。這是一個非常簡單的解決方案,實現起來非常簡單快捷......也許其他人知道更多地道的東西。

+0

這是一個簡單的解決方案確定GUI佈局。它雖然不是很靈活,並且不能處理轉換(可摺疊區域等)。我肯定會推薦學習通過使用狀態的「正確」方式。 – 2008-10-16 21:13:58

+0

話雖如此,我們的代表分數的差異表明一些沉默的觀察者不同意我。也許他們想說話嗎? :) – 2008-10-16 21:15:25

5

最好的做法是使用狀態。例如:

<mx:states> 
    <mx:State name="State1"> 
     <mx:AddChild position="lastChild"> 
      <components.../> 
     </mx:AddChild> 
    </mx:State> 
    <mx:State name="State2"> 
     <mx:AddChild position="lastChild"> 
      <mx:Canvas.../> 
     </mx:AddChild> 
     <mx:AddChild position="lastChild"> 
      <mx:VBox.../> 
     </mx:AddChild> 
    </mx:State> 
</mx:states> 

那麼你的代碼中,你叫this.currentState =「狀態1」啓用第一狀態等使用狀態,可以有選擇地顯示和隱藏部件。

我建議使用google搜索flex州教程,並嘗試一些瞭解州的工作原理。