2009-12-16 59 views
0

我在一個網站中有一個MXML組件,我在幾個不同的屏幕上重複使用它。 根據用戶點擊的內容,組件初始化一些值並開始播放媒體。我可以使我的MXML組件成爲一個Singleton嗎?

現在,如果我點擊網站,並在屏幕1中播放媒體,組件將初始化並播放媒體。

如果我然後轉到屏幕2並播放媒體,組件將初始化兩次。一次爲屏幕一次,一次爲屏幕2.

當我然後去屏幕三,它將開始初始化三次..所以它是爲每個屏幕創建一個MXML組件的新實例!

如何確保MXML組件僅初始化我需要它初始化的屏幕?

我真正想要的是該組件在整個應用程序中始終只有一個實例。是否有可能將該MXML組件轉換爲單例文件,以便我的應用程序中始終擁有該MXML的一個實例?

回答

1

爲什麼不將組件放入模塊並以此方式使用它。您可以加載和/或卸載一個模塊,並在任何你喜歡的地方使用它!只是把它稱爲一個單一的項目!而且你的應用程序的開銷非常少。

2

你能解釋一下這更深入一點嗎? 「屏幕」是什麼意思?這聽起來像你有你的組件嵌套在某種視圖堆棧中,並且你的屏幕是視圖堆棧中的不同部分,但很難在這裏說明。

無論如何,我認爲解決方案是從視圖中抽象出您想要成爲單例的組件部分。 Flex默認情況下以懶惰的方式初始化視圖堆棧中的對象,但可以使用ViewStack對象上的creationPolicy屬性覆蓋此屬性。聽起來就像您的creationPolicy在您訪問它們時初始化子組件,並且組件代碼中的某些內容會導致其他實例同一對象在其他實例創建時重新觸發一些初始化代碼(可能在您嘗試使用MXML單例實驗時)。

爲了真正實現您想要的效果,您應該只需編寫一些動作腳本,以智能方式重新保留您只想創建兩次的顯示對象。當我們在屏幕上討論視圖對象時,「單例」的想法並沒有那麼有意義 - 讓它在許多地方顯示,你需要很多實例,而重新父母的過程稍微複雜一些單身模式,所以你需要做一些創造性的邏輯。

希望這會有所幫助 - 再次,如果您想要更具體的響應,請隨時張貼更多的源代碼。

+0

該組件在視圖堆棧中的多個位置以及Canvas的不同狀態的較高級別中使用。 在我的模型中,我有一個保存當前應用程序狀態的值。當用戶導航時,應用程序狀態得到更新。 應用程序狀態值綁定到此mediaplayer,這是我正在討論的MXML組件。只要應用程序狀態變爲需要播放媒體的應用程序狀態,媒體播放器就會初始化。 如果您在此基礎上有更多的建議,請發佈;) 我將開始使用您迄今給我的內容。 謝謝! – Bocaxica 2009-12-16 18:09:49

+0

好吧,我想我現在可以按照你上面所說的來工作了。確實,一些智能重新設計的組件工作。 你是對的,的確我需要組件的更多實例,但通過構建組件的更明智的初始化,我可以使這項工作:) 感謝您的幫助! – Bocaxica 2009-12-16 18:28:56

+0

嗯。這聽起來有點棘手。我認爲你需要做的是重新組裝你的視頻組件 - 在舊父組件上調用removeChild(),然後在新組件上添加addChild()。你當然可以在單例上下文中設置它,以便組件本身處理它的重新映射 - 如下所示: public static getAndAddInstance(newParent:Container):void {(!_ instance){_instance = new thisThing(); } if(_instance.containerParent){ _instance.containerParent.removeChild(_instance); } newParent.addChild(_instance); } 類似的東西。 – 2009-12-18 23:38:16

相關問題