データグリッドには2つのボタン列があります。以下のような機能を実装すると思います。最初は「比較」ボタンが有効になっていて、「送信」ボタンが無効になっています。[比較]ボタンをクリックした後、httpリクエストをサーバーに送信します。非同期応答が返されるとすぐに、[比較]ボタンを無効にし、[送信]ボタンを有効にします
これを実装するために、ボタン列にインラインItemrendererを使用します。以下に示すように、データグリッドの各行に「送信」と「比較」の2つのボタンがあります。
アプリケーションレベルでボタンのステータスを設定するために、データグリッドにボタンを格納するための2つのオブジェクト(マップ)を定義しました。
//for storing send buttons.the key is the first hidden column value "id".
[Bindable]
public var sendButtonMap:Object = new Object();
//for storing compare buttons.the key is the same as above.
[Bindable]
public var compareButtonMap:Object = new Object();
ボタンが初期化されているときにボタンをマップに登録して、itenrendererの外部でボタンを制御できるようにします。
<mx:Button label="Compare" creationComplete="compareBtn_creationCompleteHandler(event)" />
問題は、ページの初期化時にcreationCompleteがトリガーされないことです。itemrendererの外側にボタンを作成しましたが、うまく機能します。なぜcreationCompleteイベントが発生しないのですか?ここにmxmlをリストします
<s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:configurationIngestSource="configuration.ingestSource.*"
xmlns:commonComponent="common.*"
paddingLeft="5"
paddingTop="5"
creationComplete="sourceDeviceList_creationCompleteHandler(event);ingestSourceMain_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
[Bindable]
public var sendButtonMap:Object = new Object();
//Alert.show("init sendButtonMap");
[Bindable]
public var compareButtonMap:Object = new Object();
]]>
</fx:Script>
<s:DataGrid id="sourceDeviceDataGrid"
width="{Util.getMainNavigatorWidth() - 27}"
height="{Util.getMainNavigatorHeight() / 3 * 2 }"
selectionMode="singleRow"
doubleClickEnabled="true"
dataProvider="{localSourceDevices}">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="id"
headerText="id"
visible="false"
headerRenderer="{customHeaderRenderer}"/>
<s:GridColumn dataField="name"
headerText="Name"
width="{Util.getMainNavigatorWidth() / 6 }"
headerRenderer="{customHeaderRenderer}"/>
<s:GridColumn dataField="id"
headerText="Compare"
width="{Util.getMainNavigatorWidth() / 6 }"
headerRenderer="{customHeaderRenderer}">
<s:itemRenderer>
<fx:Component>
<s:GridItemRenderer creationComplete="compareBtn_creationCompleteHandler(event)" >
<fx:Script>
<![CDATA[
import spark.components.Button;
import mx.events.FlexEvent;
import mx.controls.Alert;
protected function compareBtn_creationCompleteHandler(event:FlexEvent):void
{
//Never reach here,anything wrong?
Alert.show(this.data.id);
outerDocument.compareButtonMap[this.data.id] = event.target;
}
]]>
</fx:Script>
<mx:Button label="Compare" creationComplete="compareBtn_creationCompleteHandler(event)" />
</s:GridItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:GridColumn>
<s:GridColumn dataField="id"
headerText="Send"
width="{Util.getMainNavigatorWidth() / 6 }"
headerRenderer="{customHeaderRenderer}">
<s:itemRenderer>
<fx:Component>
<s:GridItemRenderer>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.controls.Alert;
protected function sendBtn_creationCompleteHandler(event:FlexEvent):void
{
import mx.utils.ObjectUtil;
outerDocument.sendButtonMap[this.data.id] = event.currentTarget;
Alert.show( ObjectUtil.toString(event.currentTarget));
}
]]>
</fx:Script>
<mx:Button label="Send" creationComplete="sendBtn_creationCompleteHandler(event)" />
</s:GridItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:GridColumn>
</s:ArrayList>
</s:columns>
</s:DataGrid>
</s:VGroup>