为自定义mxml组件设置内容子项

时间:2009-12-09 01:28:06

标签: flex

我正在尝试开发一个自定义组件来充当分隔符。

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml">
   <mx:Canvas id="left"/>
   <mx:Canvas id="right"/>
</mx:HBox>

我想使用这个组件分配这样的对象:

<Divider>
    <left>
        <mx:label text="Stuff I want to put in the left canvas"/>
        <mx:label text="etc..."/>
        <mx:label text="etc..."/>
    </left>

    <right>
        <mx:label text="Stuff I want to put in the right canvas"/>
        <mx:label text="etc..."/>
        <mx:label text="etc..."/>
    </right >
</Divider>

不幸的是,这不起作用。我收到编译错误说: 在'left'的初始化程序中:目标类型mx.containers.Canvas的多个初始值设定值。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

我最终找到了从Adobe网站上阅读following的解决方案。

使用描述为模板组件的技术,您可以指定某种类型对象的数组。我最终重写了我的组件如下:

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" initialize="init()">
    <mx:Script>
    <![CDATA[

       [ArrayElementType("mx.core.UIComponent")]
       public var right:Array;

       [ArrayElementType("mx.core.UIComponent")]
       public var left:Array;

       protected function init():void
       {
           var i:int;

           for (i = 0; i < left.length; i++)
               leftCanvas.addChild(left[i]);

           for (i = 0; i < right.length; i++)
               rightCanvas.addChild(right[i]);            
       }         

    ]]>
    </mx:Script>

    <mx:Canvas id="rightCanvas"/>
    <mx:Canvas id="leftCanvas"/>
</mx:HBox>

现在按预期工作。