0

我正在尝试对我网站中的页面使用封面流布局,即列表中的每个项目都不是图像或面板,而是整个页面本身。这些页面本质上是自定义组件。

我想要的是能够在运行时在我的 ItemRenderer 中创建我的自定义组件的实例。例如,这是显示封面流布局的代码:

<s:List id="pageList" depth="0" itemRenderer="com.helpdesk.proj.renderers.pageRenderer"
        dataProvider="{menuItems}" selectedIndex="{navigationButtonGroup.selectedIndex}" borderVisible="false" 
        x="5" y="200" width="100%" height="500">
    <s:layout>
        <layouts:CoverFlowLayout id="hdCoverflow"
                                 horizontalDistance="85"
                                 selectedItemProximity="50"
                                 selectedIndex="{pageList.selectedIndex}"
                                 depthDistance="1" 
                                 elementRotation="-70" 
                                 focalLength="300"
                                 perspectiveProjectionX="-1" 
                                 perspectiveProjectionY="-1"/>
    </s:layout>
</s:List>

列表的数据提供者基本上是一个对象数组,其中包含顶部导航栏的名称(字符串)(主页、关于、联系我们等)。我创建了具有相同名称的自定义组件。即我有一个名为“home”、“about”等的自定义组件。

因此,在项目渲染器中,我想创建相应自定义组件的实例。到目前为止,这就是我所拥有的:

<?xml version="1.0" encoding="utf-8"?>

        import mx.core.UIComponent;
        import mx.events.FlexEvent;

        [Bindable]private var currItem:String = data.name;
        protected function itemrenderer1_creationCompleteHandler(event:FlexEvent):void
        {
            var myClass:Class = Class(getDefinitionByName(currItem));
            var mycomp:Object = new myClass();

        }

    ]]>
</fx:Script>    

我希望“mycomp”将保存当前自定义组件的实例。如何将此对象添加到应用程序?我尝试了 parentDocument.addChild 但它抛出了一个错误。有没有其他方法可以做整个事情?

4

1 回答 1

0

尝试这个 :

override protected function commitProperties():void {
    super.commitProperties();
    addCustomecomponent();
}

public function addCustomcomponent():void{

var myClass:Class = Class(getDefinitionByName(currItem));
            var mycomp:Object = new myClass();
    addElement(mycomp);   // addChild if you are using flex 3.6 or below

}
于 2012-01-07T06:30:46.383 回答