UIComponent基类不起作用

时间:2010-01-04 17:55:08

标签: flex actionscript-3 mxml

我有一个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永远不会在运行时出现。

3 个答案:

答案 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进入这些课程以了解最佳实践。