MXML:ItemRenderer将数据行转发到按钮单击事件

时间:2012-04-23 15:24:12

标签: flash flex actionscript mxml

我使用flex spark itemrenderer来可视化数据行。每一行还有一个按钮,它应该根据它是哪一行做某事。为此,我需要在单击按钮时访问数据行。但我不知道如何得到它。

这是itemrenderer的外观:

<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/halo">
<fx:Script>
<![CDATA[
private function click(e:flash.events.Event):void
{
    //how do i get access to the data of the row here?
}
]]>
</fx:Script>

<s:HGroup>
 <s:Label text="{data.GameName}" width="300" />
 <s:Button label="Start" click="click(event)" />
</s:HGroup>

</s:ItemRenderer>

2 个答案:

答案 0 :(得分:2)

dataitemRenderer属性将包含此itemRenderer当前显示的dataProvider元素。

您可以使用itemIndex属性在列表的dataProvider中获取数据元素的索引。

我认为你需要前两个中的一个,但由于“datarow”对我来说很暧昧,这里有一些其他可能有帮助的想法。

如果您需要访问该行的实例;这与itemRenderer实例没有什么不同,因此您可以使用this关键字访问itemRenderer上单击按钮的属性。

如果您需要在所有列表的itemRenderers的上下文中知道itemRenderer的索引;这将变得更加困难。由于在滚动列表时会重复使用itemRenderer,因此渲染器实例的数量与dataProvider中的项目数之间不存在一对一的关系。我不知道为什么你需要它,所以我猜这不是你需要的。

答案 1 :(得分:1)

我在FDT中尝试了您的代码,它立即警告我使用 单击 作为函数名称,因为它是一个保留字。我不确定这是不是你的问题。

使用mx而不是spark我这样做了:

        public function rackDataClick(event : ListEvent) : void
        {
            rackID.text = event.itemRenderer.data.rackBarcode;
            racks.barcode = event.itemRenderer.data.rackBarcode;
            racks.rackName = event.itemRenderer.data.rackName;
            racks.maxRow = event.itemRenderer.data.maxRow as Number;
            racks.maxCol = event.itemRenderer.data.maxCol as Number;
            racks.location = event.itemRenderer.data.location;
        }

。 。

    <s:FormItem>
        <mx:DataGrid id                    ="rackData"
                     dataProvider          ="{rackRequest.lastResult.rack.data}"
                     verticalScrollPolicy  ="on"
                     horizontalScrollPolicy="on"
                     itemClick             ="rackDataClick(event);"
                     includeIn             ="default">
            <mx:columns>
                <mx:DataGridColumn headerText="Rack ID"
                                   dataField ="rackBarcode"/>
                <mx:DataGridColumn headerText="Rack Name"
                                   dataField ="rackName"/>
                <mx:DataGridColumn headerText="Max Rows"
                                   dataField ="maxRow"/>
                <mx:DataGridColumn headerText="Max Columns"
                                   dataField ="maxCol"/>
                <mx:DataGridColumn headerText="Location"
                                   dataField ="location"/>
            </mx:columns>
        </mx:DataGrid>
    </s:FormItem>

我知道这并不是你想要的,但有时任何例子都会有助于搜索。