Создание пользовательских компонентов во время выполнения в рендерере элементов - PullRequest
0 голосов
/ 16 февраля 2011

Я пытаюсь использовать макет обложки для страниц моего веб-сайта, т. Е. Каждый элемент в списке - это не изображение или панель, а сама страница целиком.Страницы по сути являются пользовательскими компонентами.

Я хочу иметь возможность создавать экземпляры моего пользовательского компонента во время выполнения в моем ItemRenderer.Например, это код для отображения макета Coverflow:

<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,о, свяжитесь с нами и т. д.).Я создал пользовательские компоненты с теми же именами. То есть у меня есть пользовательский компонент с именем "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, но он выдает ошибку.Есть ли другой способ сделать все это?

1 Ответ

0 голосов
/ 07 января 2012

Попробуйте это:

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

}
...