具有更多内部功能的 Flex 自定义组件

Posted

技术标签:

【中文标题】具有更多内部功能的 Flex 自定义组件【英文标题】:Flex Custom Component with More Inside 【发布时间】:2012-04-26 08:44:47 【问题描述】:

我在 Flex 中创建了一个自定义组件,扩展了 BorderContainer 类,我希望能够在我的主应用程序中使用它时在标签集中放置其他内容,如下所示:

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

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

这很好用,只是我的组件定义里面有一些额外的东西,比如&lt;s:Label/&gt; 和样式,当我去使用它时,它会被上面标签集中的内容替换。

如果我没有在标签集中放置任何内容,则不会替换原来在组件中的内容。

有没有一种方法可以让我在使用组件时简单地在组件内附加额外的内容,而不是每次都替换它?

感谢您的宝贵时间!

【问题讨论】:

【参考方案1】:

不是“简单地”,您必须解决它。 这是一篇包含血腥细节的博文,包括一个带有源代码的示例应用程序:http://www.munkiihouse.com/?p=37(第 3 步)

总而言之,您编写类以拦截设置为默认“虚拟”属性的子组件,并稍后将它们添加到您的“主”属性/容器中。

主要属性是您在自定义组件定义中包含现有元素的属性。 dummy 属性是组件实例将添加元素的默认属性。

祝你好运。

【讨论】:

太棒了!谢谢你的链接! @spryno724 虽然从技术上讲这个解决方案可能有效,但它完全无视 Spark 架构。一种更简洁的方法是简单地使用 SkinnableContainer 并为其创建自定义皮肤(包含附加标签和样式的皮肤)。看看this answer,它描述了一种与您的情况非常相似的情况(除了您甚至不必继承 SkinnableContainer,因为您没有要公开的属性或要添加的特殊行为)。

以上是关于具有更多内部功能的 Flex 自定义组件的主要内容,如果未能解决你的问题,请参考以下文章

Flex 4中的自定义视频搜索栏控制[关闭]

树组件上的 Flex 4 自定义滚动条

flex 自定义组件

自定义 Flex 3 容器

Flex 4 从自定义组件调度自定义事件(为啥 flex 将自定义事件转换为 mouseevent)

如何创建自定义 Flex 4 组件