ActionScript创建自定义组件以容纳其他两个spark组件

时间:2012-10-03 16:12:18

标签: flex actionscript custom-component flex-spark

我对ActionScript / Flex相当新,所以我不确定这是否可行。

基本上我在我的代码中重复了几次以下的块:

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

我要做的是创建一个ActionScript自定义组件,这样我就可以在代码中的任何地方替换上面的块:

<MyBlock\>

我最好的猜测是我必须通过扩展spark.application来做到这一点吗?

到目前为止我所拥有的:

package MyPackage
{
   import spark.components.Application;

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

如果可能的话,我完全不知道如何将两个现有组件组合成一个新的自定义组件。

接下来我该怎么办?任何帮助将不胜感激。

谢谢,

1 个答案:

答案 0 :(得分: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