2010-10-02 58 views

回答

3

理想情況下,組件應該是自包含的應用程序的一小塊。一個組件不應該對任何組件產生任何影響(包括更改狀態),除非可能是子組件。

改變不相關組件狀態的「合適的封裝」方法是從組件派發事件。通過調用組件上需要狀態更改的方法或更改組件上的屬性,組件的父級(或層級鏈中上級的某個組件)將執行事件偵聽器並更改相應組件的狀態這需要狀態的改變。

如果你有一個複雜的層次結構,這種方法會導致很多乏味,在事件鏈上創建事件,並在鏈中創建屬性/方法以保持封裝。一些框架,比如Cairngorm引入了一個全局單例來避免這種乏味。在Cairngorm中,Singleton是ModelLocator。

ModeLlocator基本上是應用程序中的全局依賴項。您可以授予任何組件訪問權限,並且通過使用綁定(如果某個屬性在一個位置發生更改),可以在其他位置自動更新。要使用綁定改變狀態,使用這樣的方法:

在ModelLocator中,創建一個變量來保存狀態有問題的看法:

[Bindable] 
public var comp1State : String = 'defaultState'; 

在COMP1做這樣的事情:

<mx:Container currentState="{model.comp1State}" otherComponentProperties> 
<!-- other component code including defining the states --> 
</mx:Container> 

然後在你想改變狀態的組件,做這樣的事情:

model.comp1State = 'nextState' 

綁定將從這裏採取。我不會輕易使用他的方法。這取決於您嘗試創建的組件以及您關於重用的多少。我見過的最常用的方法不是使用狀態,而是使用ViewStack中的selectedIndex。但是,這種做法是一樣的。

0

是的。我通常將我的組件的狀態綁定到我的模型中的屬性。

只要您將模型上的屬性綁定到綁定上,就應該能夠將 直接綁定到您視圖中的模型。你必須在你的模型中設置狀態。 Id使用[swiz] [http://swizframework.org/]或mate等框架進行研究。

+0

我實際上使用Cairngorm.How將組件的狀態變爲變量?你可以提供示例代碼嗎? – Tam 2010-10-03 00:49:06

+2

這兩種海報原創方法(訪問頂級應用程序)和綁定到模型的方法打破了封裝,並最大限度地減少了重用。他們不是我會盲目採取的方法。 – JeffryHouser 2010-10-03 01:23:40

+0

我不得不同意@ www.Flextras.com,我不會讓我的模型知道狀態,每當我需要改變狀態時,我都不會改變我的模型。 – KensoDev 2010-10-03 06:58:07

相關問題