2012-12-01 30 views
0

我們知道我們可以在我們的.mxml中定義狀態。事情是,我們的應用程序或組件可能只能在任何時候在其中的一個州。Flex(尤其是移動)狀態 - 多個同時狀態?

當對Flex Mobile進行編程時,橫向和縱向(方向)通常需要狀態以便輕鬆定義控件/組件/元素是否可見,(dis/en)是否可用,顏色。但是我們的應用程序或組件還具有其他狀態,獨立於屏幕方向,例如SufficientCredit和InsufficientCredit。

假設我們只在狀態爲SufficientCredit時才顯示提交按鈕。但是,當您更改手機的方向時,您還需要顯示/隱藏/着色其他控件。在現實生活中,您的信用狀態確實是SufficientCredit,但您的應用現在處於縱向或橫向狀態。現在我們的提交按鈕將消失,儘管它不處於InsufficientCredit狀態。

我不想創建像LandscapeSufficientCredit,LandscapeInsufficientCredit,PortraitSufficientCredit和PortraitInsufficientCredit這樣的「組合」狀態。我也不希望完全拋棄狀態並寫出一個巨大的if-else語句,其中每個分支必須包含修改組件屬性(顏色,大小,可視性等)的代碼,然後記得從很多地方調用它那會改變狀態。

我聽說過州政府組織,但是他們的文件很混亂,我不確定他們是否會在這種情況下提供幫助。

+0

Stategroups可能是想要的;但我同意這些文檔很混亂。我沒有時間去嘗試解釋它。 [作爲旁白;在移動設備上,您的最佳性能結果可能是在updateDisplayList()中編寫自己的佈局/顯示代碼,而不是使用MXML。 – JeffryHouser

+0

我擔心你會這麼說 - 在ActionScript中佈局/顯示,有大量條件用於「嗅探」方向和其他狀態,以及明確的組件屬性分配。我想這不是很糟糕,但它只是更多的工作/維護。在此之前,我會繼續尋找更好的國家團體解釋。 –

+0

在我寫的應用程序中;我只是使用updateDisplayList()的unscaledWidth/unscaledHeight來確定如何顯示內容,而不考慮橫向/縱向。誠然,我可以尊重這對許多應用程序很重要。有時編寫自己的佈局代碼可能很乏味;但並不難。 – JeffryHouser

回答

0

我想如果你想同時使用兩個狀態,那麼這些狀態應該影響獨立參數(我猜屏幕方向和顏色是獨立的)。

在這種情況下,您可能需要製作一些子組件,以監視特定父級的狀態並處理它們。

在這種情況下,您也可以使用繼承樣式來實現它 - 您可以在父組件中調用setStyle(「Credit」,「Insufficient」),並且所有了解這些樣式的孩子都會相應地更改其表示。

0

StateGroups是你的答案。您可以執行以下操作:

<s:State name="portrait" group="portraitStates"/> 
<s:State name="landscape" group="landscapeStates"/> 
<s:State name="portraitState1" group="portraitStates, state1States"/> 
<s:State name="landscapeState1" group="landscapeStates, state1States"/> 
<s:State name="portraitState2" group="portraitStates, state2States"/> 
<s:State name="landscapeState2" group="landscapeStates, state2States"/> 

然後在您的視圖中重寫getCurrentState()方法以確定您的狀態。如

override public function getCurrentViewState():String 
{ 
    var aspect:String = FlexGlobals.topLevelApplication.aspectRatio; //gets landscape/portrait 
    //some logic to determine current state 
    return aspect+currentState; 
} 

我已經做到了這一點,讓手機/平板電腦+多個狀態的景觀/肖像都在一個視圖中。