0

私はフレックススパークアイテムレンダラーを使用してデータの行を視覚化します。各行には、それがどの行であるかに応じて何かを実行する必要があるボタンもあります。このため、ボタンがクリックされたときにデータ行にアクセスする必要があります。しかし、私はそれを取得する方法がわかりません。

これは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>
4

2 に答える 2

2

itemRendererdataプロパティには、このitemRendererが現在表示しているdataProviderの要素が含まれます。

itemIndexプロパティを使用して、リストのdataProvider内のデータ要素のインデックスを取得できます。

前の2つのうちの1つが必要だと思いますが、「datarow」は私にはあいまいなので、ここに役立つかもしれない他のいくつかの考えがあります。

行のインスタンスにアクセスする必要がある場合。これはitemRendererインスタンスと同じであるため、thisキーワードを使用して、ボタンがクリックされたitemRendererのプロパティにアクセスできます。

リストのすべてのitemRenderersのコンテキストでitemRendererのインデックスを知る必要がある場合。それははるかに難しいでしょう。itemRenderersはリストがスクロールされるときに再利用されるため、レンダラーインスタンスの数とdataProvider内のアイテムの数の間に1対1の関係はありません。なぜそれが必要なのかわからないので、これはあなたが必要としているものではないと思います。

于 2012-04-23T15:49:58.280 に答える
1

FDTでコードを試しましたが、予約語であるため、関数名としてクリックを使用するようにすぐに警告されました。それがあなたの問題かどうかはわかりません。

Sparkの代わりに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>

これがあなたが探していたものと正確に一致しないことは知っていますが、検索に役立つ例がある場合もあります。

于 2012-04-23T17:50:37.677 に答える