1

我对 ActionScript/Flex 还很陌生,所以我不完全确定这是否可能。

基本上,我的代码中有以下块重复多次:

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

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

<MyBlock\>

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

到目前为止我所拥有的:

package MyPackage
{
   import spark.components.Application;

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

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

接下来我应该如何进行?任何帮助,将不胜感激。

谢谢,

4

1 回答 1

1

它比这容易得多:对于这个用例,您应该简单地扩展Group. 为了使事情更容易,用 MXML 编写您的组合组件。

创建一个新文件MyBlock.mxml(例如 in 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一遍又一遍地使用。

于 2012-10-03T16:25:59.490 回答