2010-01-04 23 views
1

我有一个BaseComponentClass,我用作所有我的自定义组件扩展的类。 出于某种原因,我的自定义组件在运行时不显示。我没有收到任何编译或运行时错误。 我正在实施所有受保护的UIComponent方法。 我的代码如下所示: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自定义组件有点像这样:

<local:BaseComponentClass xmlns:local="local.com.*" xmlns:mx="http://www.adobe.com/2006/mxml"> 
    <mx:Button id="btn" label="My Button" /> 
</local:BaseComponentClass> 

的按钮从不在运行时显示出来。

+0

如果您不覆盖受保护的方法(因为您目前没有在其中做任何额外的工作)会发生什么? – 2010-01-05 00:04:11

+0

什么都没有发生。我上面描述的问题仍然存在。 – CodeQrius 2010-01-05 00:10:39

回答

1

显然你想添加子对象到你的BaseComponent。

为什么不从一个支持此功能的类继承,如Box或Canvas?

+0

我也想过这样做,但我想知道如果这样做会使我的Flex应用程序更重,与使用UIComponent作为基础相比。 – CodeQrius 2010-01-05 01:11:56

+0

为什么你需要基类?什么是你的组件之间的共享代码,不是UI组件的一部分,上面没有显示?也许有另一种方式。否则,使用容器类作为基类只会给你带有功能容器的所有好处,如自动布局等。 – Stefan 2010-01-05 02:03:03

0

您是否尝试设置该组件的宽度和高度?

缺省状态下,UIComponent的宽度和高度都设置为0

,你可以在这里看到的默认值的文件,并相应地改变它的基本组件上: http://livedocs.adobe.com/flex/3/langref/mx/core/UIComponent.html

祝你好运!

+0

是的。我做到了。宽度和高度在Flex应用中生效,但没有显示按钮。 – CodeQrius 2010-01-04 19:18:36

0

我不确定最佳实践,所以在实现它之前先研究一下,但如果是我,我会创建一个数组属性(子类可以从uicomponent中获得),然后在类的某个地方使用defaultProperty元数据标签([DefaultProperty(“children”)])。

如果您要调试代码并在for循环中放置一个断点,您将永远不会碰到addChild代码。事实上,createChildren(uiComponent.createChildren)的goto定义(f3),你会发现它是空的。您必须在您创建的默认属性设置器中显式调用addChild。你最好打赌,如果你总是将这个组件作为一个容器类来使用,那就是扩展Container。 F3进入这些课程以获得最佳实践的感受。