我对ActionScript / Flex相当新,所以我不确定这是否可行。
基本上我在我的代码中重复了几次以下的块:
<s:TextInput .. \>
<s:BitmapImage .. \>
我要做的是创建一个ActionScript自定义组件,这样我就可以在代码中的任何地方替换上面的块:
<MyBlock\>
我最好的猜测是我必须通过扩展spark.application来做到这一点吗?
到目前为止我所拥有的:
package MyPackage
{
import spark.components.Application;
public class MyBlock extends Application
{
..
}
..
}
如果可能的话,我完全不知道如何将两个现有组件组合成一个新的自定义组件。
接下来我该怎么办?任何帮助将不胜感激。
谢谢,
答案 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