2012-10-03 78 views
1

我對ActionScript/Flex相當陌生,所以我不完全確定這是否可能。ActionScript創建自定義組件以容納兩個其他火花組件

基本上我有以下塊在我的代碼多次重複:

<s:TextInput .. \> 
<s:BitmapImage .. \> 

我想要做的就是創建一個ActionScript自定義組件,所以我可以在我的代碼到處替換上面的塊:

<MyBlock\> 

我最好的猜測是我必須通過擴展spark.application來做到這一點?

我有什麼至今:

package MyPackage 
{ 
    import spark.components.Application; 

    public class MyBlock extends Application 
    { 
    .. 
    } 
.. 
} 

我手足無措,如何在現有組件組合成一個新的自定義之一,如果它甚至有可能是完全。

接下來我應該如何處理?任何幫助,將不勝感激。

感謝,

回答

1

它比容易得多:用於該用途的情況下,你應該簡單地擴展Group。爲了使事情變得更簡單,在MXML中編寫您的組合組件。

創建一個新文件MyBlock.mxml(例如在com/mydomain/components),並添加以下代碼:

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark"> 

    <s:TextInput .. /> 
    <s:BitmapImage .. /> 
</s:Group> 

現在只需使用這個組件:

<c:MyBlock /> 

其中c命名空間的定義爲xmlns:c="com.mydomain.components.*"使用此類的文檔的根節點。例如:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:c="com.mydomain.components.*"> 
    <c:MyBlock /> 
</s:Application> 

現在假設你想在每塊不同的文字,你就不得不暴露的屬性。要做到這一點,讓我們來添加一個label屬性MyBlock

<fx:Declarations> 
    <fx:String id="label" /> 
</fx:Declarations> 

爲了使TextInput顯示什麼在該變量時,它改變了我們使用時綁定像這樣:

<s:TextInput text="{label}" /> 

的最後一個組件看起來如下所示:

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark"> 

    <fx:Declarations> 
     <fx:String id="label" /> 
    </fx:Declarations> 

    <s:TextInput text="{label}" .. /> 
    <s:BitmapImage .. /> 
</s:Group> 

現在您可以使用不同的文本創建多個MyBlock實例:

<c:MyBlock label="hello" /> 
<c:MyBlock label="world" /> 

請注意,如果你經常使用MyBlock的更多的是一個類似列表的方式,你可能要考慮使用List組件與定義ItemRenderer,而不是一遍一遍使用MyBlock

+0

非常感謝!實際上,我想到的是一個布爾屬性,所以當屬性設置爲true時,MyBlock將顯示一個圖像,另一個圖像顯示爲false。我想我可以用同樣的方式開展工作,謝謝! –