【问题标题】:MXML: ItemRenderer forwarding data row to button click eventMXML:ItemRenderer 将数据行转发到按钮单击事件
【发布时间】:2012-05-04 05:40:23
【问题描述】:

我使用 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>

【问题讨论】:

    标签: flash apache-flex actionscript mxml


    【解决方案1】:

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

    使用 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>
    

    我知道这不是您要查找的内容,但有时任何示例都会对搜索有所帮助。

    【讨论】:

      【解决方案2】:

      itemRendererdata 属性将包含此 itemRenderer 当前正在显示的 dataProvider 中的元素。

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

      我认为您需要前两个之一,但由于“datarow”对我来说含糊不清,这里有一些其他想法可能会有所帮助。

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

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

      【讨论】:

        猜你喜欢
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-23
        • 2013-11-14
        • 2012-01-19
        • 2010-10-21
        相关资源
        最近更新 更多