Flex Call ItemRenderer внутри новой панели ()

У меня есть приведенная ниже функция, создающая новые панели внутри моего ViewStack. Это прекрасно работает, и они великолепны. Однако я пытаюсь разместить некоторый контент в панелях, но у меня ничего не получается.

       private function viewstack_addChild(name:String):void {
            //if (accordion.numChildren < MAX_CHILDREN) {
                var p:Panel = new Panel();
                p.id = name;
                p.name = name;
                p.title = name;
                p.percentWidth = 100;
                p.percentHeight = 100;
                var display:PageItemRenderer = new PageItemRenderer;
                p.finishPrint(display);
                var randColor:uint = Math.random() * 0xFFFFFF;
                p.setStyle("backgroundColor", randColor);
                myViewStack.addChild(p);
                //myViewStack.selectedChild = p;
            //}
        }

У меня есть настраиваемое средство визуализации элементов под названием PageItemRenderer, которое будет принимать данные xml и отображать их, но я не могу понять, как вызвать средство визуализации для каждой панели.

Любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ: добавление PageItemRenderer.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox 
height="100%" 
width="100%" 
xmlns:mx="http://www.adobe.com/2006/mxml">

<mx:HBox width="100%" height="100%">
    <mx:VBox height="100%" width="20%" horizontalAlign="center" verticalAlign="middle">
        <!-- software image -->
        <mx:Image source="{data.image}"  width="90%" height="90%"/>
    </mx:VBox>

    <!-- person's name -->
    <mx:VBox height="100%" width="80%" horizontalAlign="left" verticalAlign="middle">
        <mx:Label width="100%" height="100%" text="{data.name} {data.version}" color="#FFAE00"/>
        <mx:Label width="100%" height="100%" text="{data.description}" color="#FFFFFF"/>
    </mx:VBox> 
</mx:HBox>

</mx:HBox>

person medoix    schedule 07.11.2009    source источник


Ответы (1)


Panel - это просто контейнерный класс, и ваш PageItemRenderer должен расширять некоторые UIComponent, поэтому просто сделайте это в своем viewstack_addChild методе:

 var p:Panel = new Panel();
 // set the properties on p
 var pR:PageItemRenderer = new PageItemRenderer();
 var data:Object;
 // Do something to get the data to be displayed;
 pR.data = data;
 p.addChild(pR);
 myViewStack.addChild(p);

РЕДАКТИРОВАТЬ: изменено pR.setData на pR.data РЕДАКТИРОВАТЬ: изменено pR.data(data) на pR.data = data;

person Ryan Lynch    schedule 07.11.2009
comment
Привет, LynchRJ, спасибо за ответ, однако я все еще не уверен, как на самом деле вызвать там рендерер предметов для переменной данных .. - person medoix; 07.11.2009
comment
Я пошел дальше и внес исправление в код. Средство рендеринга элементов drop - это класс UIComponent, который реализует mx.core.IDataRenderer mx.controls.listClasses.IDropInListItemRenderer. Насколько я понимаю, вы хотите использовать его в панели вместо списка или другого элемента управления. Элемент управления List создает экземпляры средства визуализации и устанавливает данные для элемента. Если вы хотите использовать его вне этого контекста, просто создайте его экземпляр, задайте для него данные и добавьте его как дочерний элемент контейнера, в который вы хотите его поместить. - person Ryan Lynch; 07.11.2009
comment
Извините, я имею в виду, что он реализует интерфейсы mx.core.IDataRenderer и mx.controls.listClasses.IDropInListItemRenderer. - person Ryan Lynch; 07.11.2009
comment
В следующей строке .. var pR: PageItemRenderer = new PageItemRenderer (); Я получаю .. TypeError: Ошибка № 1006: значение не является функцией. PageItemRenderer - это файл средства визуализации mxml в com.xd.components.renderers. - person medoix; 08.11.2009
comment
Опубликуйте MXML для класса PageItemRenderer как часть своего вопроса. - person Ryan Lynch; 08.11.2009
comment
Я добавил страницу выше, я использую аналогичную страницу для рендеринга элементов в сетке данных, и она работает нормально, что я пытаюсь сделать, я, когда приложение загружает, создает страницу для каждого элемента в сетке данных (работает), а затем что я хочу сделать, я визуализирую каждую страницу с пользовательскими данными, которые приложение извлекает из массива xml (данные работают для datagrid) - person medoix; 08.11.2009
comment
Я вижу проблему. Я думаю, что ошибка действительно связана со строкой pR.data (data). Это функция-установщик, поэтому вы рассматриваете ее как значение, а не функцию. Исправлю в ответ. - person Ryan Lynch; 08.11.2009
comment
Спасибо за помощь, Райан, у меня теперь нет ошибок, но Renderer тоже не отображается. Если я изменю строку pR.data = data на pR.data = PageItemRenderer; он работает, и я вижу, как средство визуализации размещает элементы внутри панели. Однако все поля {data.name} возвращаются как неопределенные. Какие-нибудь идеи? - person medoix; 08.11.2009
comment
Думаю, я исправил это, используя {Application.application.HomePage.myDG.selectedItem.name} вместо {data.name}. Однако на самом деле это не сработает, потому что в данных XML будут пустые поля ... и он возвращает неправильное значение, когда он пуст. - person medoix; 08.11.2009
comment
Похоже, у вас может быть отдельная проблема с вашими данными, возможно, тема для нового вопроса. У меня сейчас проблемы с доступом к странице, но в справке Flex есть приличный раздел о средствах визуализации элементов, и это в сочетании со справкой по API для интерфейсов, о которых я упомянул, должно дать вам достаточно информации, чтобы понять, как использовать средство визуализации элементов в этот экземпляр. - person Ryan Lynch; 08.11.2009