2012-04-23 47 views
0

我使用flex spark itemrenderer來可視化數據行。每行也有一個按鈕,它應該做一些事情依賴於它是哪一行。爲此,當點擊按鈕時,需要訪問數據行。但我不知道如何得到它。MXML: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

itemRendererdata酒店將在您的數據提供程序包含的元素,這itemRenderer的當前顯示。

您可以使用itemIndex屬性來獲取數據元素在列表的dataProvider中的索引。

我認爲你需要前兩者中的一個,但由於「datarow」對我來說是模糊的,所以這裏有一些其他的想法可能會有所幫助。

如果您需要訪問該行的實例;這與itemRenderer實例沒有區別,因此您可以使用this關鍵字來訪問單擊按鈕的itemRenderer上的屬性。

如果您需要了解itemRenderer在所有列表的itemRenderer中的上下文;這將變得更加困難。由於itemRenderer在列表滾動時被重用,渲染器實例的數量和dataProvider中的項目數量之間不存在一對一的關係。但我不確定爲什麼你需要這個,所以我猜這不是你需要的。

1

我想你的代碼在FDT,它會立即告誡我使用點擊作爲函數名,因爲它是一個保留字。我不確定這是否是你的問題。

使用MX替代火花我這樣做:

 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> 

我知道這不是你正在尋找的東西,但有時候任何示例都會幫助搜索。