我目前使用:Flexglobals.toplevelapplication.component1.compnent2.currentState ='something';什麼是Flex改變另一個組件狀態的好習慣?
有沒有更好的做法呢?我可以將組件的狀態綁定到模型中的變量嗎?
我目前使用:Flexglobals.toplevelapplication.component1.compnent2.currentState ='something';什麼是Flex改變另一個組件狀態的好習慣?
有沒有更好的做法呢?我可以將組件的狀態綁定到模型中的變量嗎?
理想情況下,組件應該是自包含的應用程序的一小塊。一個組件不應該對任何組件產生任何影響(包括更改狀態),除非可能是子組件。
改變不相關組件狀態的「合適的封裝」方法是從組件派發事件。通過調用組件上需要狀態更改的方法或更改組件上的屬性,組件的父級(或層級鏈中上級的某個組件)將執行事件偵聽器並更改相應組件的狀態這需要狀態的改變。
如果你有一個複雜的層次結構,這種方法會導致很多乏味,在事件鏈上創建事件,並在鏈中創建屬性/方法以保持封裝。一些框架,比如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。但是,這種做法是一樣的。
是的。我通常將我的組件的狀態綁定到我的模型中的屬性。
只要您將模型上的屬性綁定到綁定上,就應該能夠將 直接綁定到您視圖中的模型。你必須在你的模型中設置狀態。 Id使用[swiz] [http://swizframework.org/]或mate等框架進行研究。
我實際上使用Cairngorm.How將組件的狀態變爲變量?你可以提供示例代碼嗎? – Tam 2010-10-03 00:49:06
這兩種海報原創方法(訪問頂級應用程序)和綁定到模型的方法打破了封裝,並最大限度地減少了重用。他們不是我會盲目採取的方法。 – JeffryHouser 2010-10-03 01:23:40
我不得不同意@ www.Flextras.com,我不會讓我的模型知道狀態,每當我需要改變狀態時,我都不會改變我的模型。 – KensoDev 2010-10-03 06:58:07