我有一个BaseComponentClass,我将其用作所有自定义组件扩展的类。 出于某种原因,我的自定义组件都没有在运行时显示。我也没有得到任何编译或运行时错误。 我正在实现所有受保护的UIComponent方法。 我的代码如下所示:
public class BaseComponentClass extends UIComponent
{
public function BaseComponentClass()
{
super();
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
}
override protected function createChildren():void
{
super.createChildren();
for (var i:uint=0; i < super.numChildren; i++)
{
var childObj:DisplayObject = super.getChildAt(i);
addChild(childObj);
}
}
override protected function commitProperties():void
{
super.commitProperties();
}
override protected function measure():void
{
super.measure();
}
}
然后我将它用作我的mxml自定义组件中的Base类,如下所示:
<local:BaseComponentClass xmlns:local="local.com.*" xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Button id="btn" label="My Button" />
</local:BaseComponentClass>
Button永远不会在运行时出现。
答案 0 :(得分:1)
显然,您希望将子对象添加到BaseComponent。
为什么不从支持此功能的类继承,例如Box或Canvas?
答案 1 :(得分:0)
您是否尝试为该组件设置宽度和高度?
默认情况下,UIComponent的宽度和高度设置为0.
您可以在此处查看默认值文档,并在基本组件上进行相应更改: http://livedocs.adobe.com/flex/3/langref/mx/core/UIComponent.html
祝你好运!答案 2 :(得分:0)
我不确定最佳实践,所以在实现之前先研究一下,但如果是我,我会创建一个数组属性(子组件可以从uicomponent获得),然后在类中的某个地方使用defaultProperty元数据标签([DefaultProperty(“children”)])。
如果要调试代码并在for循环中放置断点,则永远不会遇到addChild代码。事实上,createChildren(uiComponent.createChildren)的goto定义(f3),你会发现它是空的。您必须在您创建的默认属性设置器中显式调用addChild。更好的选择,如果你总是将这个组件用作类似容器的类,那就是扩展Container。 F3进入这些课程以了解最佳实践。