Flex - типизированная ArrayCollection как поставщик данных Horizontallist - PullRequest
0 голосов
/ 08 марта 2010

У меня есть ArrayCollection объектов. Я передаю этот массив горизонталиста в качестве поставщика данных и использую пользовательский itemRenderer.

При выполнении приложения горизонтальлист отображает

[object CustomClass][object CustomClass][object CustomClass][object CustomClass]

Я пытался привести каждый объект в элементе разборки предметов следующим образом:

<mx:Label text="{(data as CustomClass).label1}"/>

Но это не работает ...

Спасибо за любую помощь, которую вы можете предоставить. С уважением,

BS_C3


Редактировать - 09 марта 2010 г.

Пойдем еще немного кода =)

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

    <mx:Component id="Item">
        <mx:VBox width="180">
            <mx:HBox width="100%">
                <mx:Spacer width="100%"/>
                <mx:Button label="x"/>
            </mx:HBox>
            <mx:Image id="thumbnail"/>
            <mx:Label width="100%" horizontalCenter="0" text="Collection"/>
            <mx:HBox width="100%">
                <mx:Label width="100" text="GIA"/>
                <mx:Label text="{data.charg_st}"/>
            </mx:HBox>
            <mx:HBox width="100%">
                <mx:Label width="100" text="Finger Size"/>
                <mx:Label text="xxxxxx"/>
            </mx:HBox>
            <mx:HBox width="100%">
                <mx:Label width="100" text="Carat"/>
                <mx:Label text="{data.carats}"/>
            </mx:HBox>
            <mx:HBox width="100%">
                <mx:Label width="100" text="Color"/>
                <mx:Label text="{data.color}"/>
            </mx:HBox>
            <mx:HBox width="100%">
                <mx:Label width="100" text="Clarity"/>
                <mx:Label text="{data.clarity}"/>
            </mx:HBox>
            <mx:HBox width="100%">
                <mx:Label width="100" text="Shop"/>
                <mx:Label text="{data.lgort_fp}"/>
            </mx:HBox>
            <mx:HBox width="100%">
                <mx:Label width="100" text="Resizing"/>
                <mx:Label text="{data.resizing}"/>
            </mx:HBox>
            <mx:HBox width="100%">
                <mx:Label width="100" text="Price Excl. VAT"/>
                <mx:Label text="{data.net_price_fp}"/>
            </mx:HBox>
        </mx:VBox>
    </mx:Component>


    <mx:HorizontalList
        dataProvider="{GlobalData.instance.tray}" 
        columnCount="4"
        rowCount="1"
        horizontalScrollPolicy="off"
        itemRenderer="{Item}"
    />
</mx:Canvas>

К вашему сведению, поставщик данных horizonalList является коллекцией объектов Array.

Теперь горизонталист отображает пустые элементы ... с правильной шириной ... Коллекция массивов не пустая (я использую оповещение о событии щелчка по элементу и получаю ожидаемые данные).

Надеюсь, это поможет> _ <</p>

С уважением, BS_C3

Ответы [ 4 ]

0 голосов
/ 15 марта 2010

Мне удалось решить мою проблему.

Когда я удалил свойство width из vbox itemrenderer, все данные появились в horizontalList. Зачем? Я не знаю почему, но кажется, что данные были расположены где-то вне видимой области видимости горизонталиста (да ??

Дело в том, что сейчас все работает. И для окончательного кода, у вас есть:

HorizontalList:

<mx:HorizontalList id="hlist"
    dataProvider="{TrayData.instance.itemsCollection}" 
    columnCount="{TrayData.instance.hlistColumns}"
    rowCount="1"
    itemRenderer="components.TrayItem"
    horizontalScrollPolicy="off"
    horizontalCenter="0" verticalCenter="0"
    borderStyle="none"
    horizontalScrollPosition="{TrayData.instance.hsPosition}"
    />

ItemRenderer:

<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" >

    <mx:HBox width="100%">
        <mx:Spacer width="100%"/>
        <mx:Button label="x"/>
    </mx:HBox>
    <mx:HBox width="100%">
        <mx:Spacer width="15%"/>
        <mx:VBox width="70%">
            <mx:Image id="thumbnail" horizontalAlign="center"/>
            <mx:Label width="100%" textAlign="center" text="Collection"/>
            <mx:HBox width="100%">
                <mx:VBox id="labelBox" width="100">
                    <mx:Label width="100" text="GIA"/>
                    <mx:Label width="100" text="Finger Size"/>
                    <mx:Label width="100" text="Carat"/>
                    <mx:Label width="100" text="Color"/>
                    <mx:Label width="100" text="Clarity"/>
                    <mx:Label width="100" text="Shop"/>
                    <mx:Label width="100" text="Resizing"/>
                    <mx:Label width="100" text="Price"/>
                </mx:VBox>
                <mx:VBox id="dataBox" width="100%" horizontalAlign="left">
                    <mx:Label text="{data.resizingCode + ' ' + data.charg_st}"/>
                    <mx:Label text="{data.fingerSize}"/>
                    <mx:Label text="{((new Number(data.carats))/100).toString()}"/>
                    <mx:Label text="{data.color}"/>
                    <mx:Label text="{data.clarity}"/>
                    <mx:Label text="{data.lgort_fp}"/>
                    <mx:Label text="{data.net_price_fp}"/>
                </mx:VBox>
            </mx:HBox>
            <mx:Button label="Order" enabled="{data.product_type == 'C'}" width="50%"/>
        </mx:VBox>
        <mx:Spacer width="15%"/>
    </mx:HBox>

</mx:VBox>

С уважением, BS_C3

0 голосов
/ 08 марта 2010

Используйте поле labelField в вашем списке, см. здесь

<mx:List dataProvider="{myDataProvider}" labelField="label1"/>
0 голосов
/ 09 марта 2010

Попробуйте объявить ваш пользовательский класс как переменную где-нибудь в вашем компоненте. После того, как вы объявите экземпляр класса, у Flex может быть больше успеха при идентификации свойств класса.

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">
  <mx:Script>
    <![CDATA[
      private var myClass:CustomClass;
    ]]> 
  </mx:Script>
    <mx:Component id="Item">
        <mx:VBox width="180">
         ...

thelost тоже правильно понял свой код. Вы должны быть в состоянии использовать

<mx:Label text="{data.label1}"/>

для доступа к свойствам вашего класса в вашем itemRenderer.

Редактировать: Я уверен, что вы сделали это, но также дважды проверьте, что вы установили dataProvider в вашем HorizontalList объявлении [Bindable] вашего CustomClass.

0 голосов
/ 08 марта 2010

Вы пробовали

<mx:Label text="{data.label1}"/>

? (label1 является собственностью ваших объектов)

...