2012-04-14 26 views
1

我在Flex中創建了一個自定義組件,擴展了BorderContainer類,並且我希望在我的主應用程序中使用它時可以在標記集中放置其他內容,如下所示:更多內容的Flex自定義組件

<components:CustomComponent title="Hello"> 
    <s:Label text="If you have one enter it below:"/> 
    <mx:Spacer height="15" /> 

    <s:HGroup> 
     <s:TextInput width="250"/> 
     <s:Button label="Submit"/> 
    </s:HGroup> 
</components:CustomComponent> 

這一切正常,只是我的組件定義了它內部的一些額外的東西,比如一個<s:Label/>和造型,這是由上面,當我去使用它的標記集內的內容所取代。

如果我沒有在標記集中放置任何內容,則最初在組件中的內容不會被替換。

當我去使用它時,是否有一種方法可以簡單地在組件內附加額外的內容,而不是每次都被替換?

謝謝你的時間!

回答

1

不是「簡單」,你必須解決它。 這裏有一個博客帖子用血淋淋的細節,包括源代碼示例應用程序:http://www.munkiihouse.com/?p=37(步驟3)

總之,您的腳本類攔截子組件被設置爲默認的「虛擬」屬性,稍後將它們添加到您的「主」屬性/容器中。

主屬性是您在自定義組件定義中擁有現有元素的主屬性。 dummy屬性是組件實例將添加元素的默認屬性。

祝你好運。

+0

非常好!謝謝你的鏈接! – 2012-04-14 01:09:36

+1

@ spryno724儘管技術上這種解決方案可能會起作用,但它完全忽視了Spark架構。一個更簡潔的方法是簡單地使用SkinnableContainer併爲它創建一個自定義Skin(包含額外的Label和樣式)。看看[這個答案](http://stackoverflow.com/questions/9930740/what-is-the-hostcomponent/9931286#9931286),描述了一個非常類似於你的情況(除非你甚至沒有必須繼承SkinnableContainer,因爲您沒有要公開的屬性或要添加的特殊行爲)。 – RIAstar 2012-04-15 20:17:35

+0

不錯!謝謝! – 2012-04-15 20:48:45