Flex - 键入的ArrayCollection作为Horizo​​ntallist的数据提供者

时间:2010-03-08 15:21:51

标签: flex dataprovider arraycollection typed

我有一个对象的ArrayCollection。 我将此数组作为数据提供者传递给horizo​​ntallist,我正在使用自定义itemRenderer。

执行应用程序时,horizo​​ntallist正在显示

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

我已尝试在itemrenderer中转换每个对象,如下所示:

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

但它不起作用......

感谢您提供的任何帮助。 的问候,

BS_C3


编辑 - 2010年3月9日

我们再去找一些代码=)

<?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>

仅供参考,horizo​​nalList数据提供者是对象的ArrayCollection。

现在,horizo​​ntallist正在显示空项......具有正确的宽度...... arraycollection不为空(我在项目的click事件上使用了一个警报,我确实检索了预期的数据)。

希望这有助于&gt; _&lt;

此致 BS_C3

4 个答案:

答案 0 :(得分:0)

你试过吗

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

? (label1是您对象的属性)

答案 1 :(得分:0)

使用列表中的labelField字段,请参阅here

<mx:List dataProvider="{myDataProvider}" labelField="label1"/>

答案 2 :(得分:0)

尝试将自定义类声明为组件中的某个变量。声明类的实例后,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声明{{1}} }}

答案 3 :(得分:0)

我设法解决了我的问题。

当我删除itemrenderer的vbox的width属性时,所有数据都出现在horizo​​ntalList中。 为什么?我不知道为什么,但似乎是将数据定位在horizo​​ntallist的可见范围内(huh ??)。

事情是现在一切正常。对于最终的代码,你有:

Horizo​​ntalList将:

<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