我正在尝试使用我的网站页面的封面流布局,即列表中的每个项目不是图像或面板,而是整个页面本身。这些页面本质上是自定义组件。
我想要的是能够在我的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,contact us等)。我创建了具有相同名称的自定义组件。我有一个名为“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,但它抛出了一个错误。还有其他方法可以做到这一切吗?
答案 0 :(得分: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
}