0

データグリッドには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>
4

1 に答える 1

1

に格納されているオブジェクトのタイプにBindableisComparedプロパティを追加しlocalSourceDevicesます。[送信]ボタンをenabledにバインドし、 isCompared[比較]ボタンenabledをにバインドします!isCompared。リクエストが届いたら、その変数の値をからに変更しfalseますtrue

于 2013-02-24T02:13:26.467 に答える