0

私の郡の環境資源を管理するためのオープンソース アプリケーションを作成しています。

データグリッドで使用している itemrenderer (コンボボックス) のデータプロバイダーに問題があります。アプリケーションは動作しますが、itemrenderer dataprovider がセッターによる更新時にデータを再割り当てされないという警告が表示されます。コンボボックス itemrenderer dataprovider を再割り当てする必要がない場合でも、ベスト プラクティスとして、この警告を解決したいと考えています。

これは、itemrenderer の parentDocument で Web サービスの結果から入力された配列コレクションとして dataprovider データを取得するために使用する通常のコードです。

    //コンボボックスitemrendererのファーマーarrayCollection値を設定します
    【綴じる】
    private var _acFarmers:ArrayCollection=new ArrayCollection;
    public function set acFarmers(acFarmers:ArrayCollection):void{
        _acFarmers=acFarmers;

    }
    // マシンの ArrayCollection 値を取得
    public function get acFarmers():ArrayCollection{
        _acFarmers を返します。
    }

これは、datagrid itemrenderer のコードです (datagrid の関心のある列のみを表示しています)。

<mx:DataGridColumn headerText="Agricoltore" dataField="farmerId" width="200" rendererIsEditor="true" editable="false">

            <mx:itemRenderer>

                <fx:Component id="cmpCmbFarmers">

                        <mx:HBox>

                        <s:ComboBox width="200" 
                                    id="cmbFarmers"
                                    dataProvider="{outerDocument.acFarmers}" 
                                    labelField="companyName" 
                                    change="onSelectionChange(event)"

                                    >
                            <fx:Script>
                                <![CDATA[
                                    import mx.controls.dataGridClasses.DataGridListData;
                                    import mx.controls.listClasses.BaseListData;
                                    import mx.events.ListEvent;

                                    private var _ownerData:Object;

                                    private function setSelected():void {

                                    }

                                    override public function set data(value:Object):void{
                                        if(value != null)  {
                                            super.data=value;
                                            _ownerData=value;

                                            if(value.collectingMachineId!==null){
                                                for each(var dp:Object in cmbFarmers.dataProvider){
                                                    var dpFarmerId:String=dp.farmerId
                                                    var dataFarmerId:String=value.farmerId;
                                                    if(dpFarmerId==dataFarmerId){
                                                        cmbFarmers.selectedItem=dp;
                                                    }
                                                }
                                            } else {
                                                cmbFarmers.selectedIndex=0;
                                                data.farmerId=cmbFarmers.selectedItem.farmerId;
                                            }
                                        }
                                    }


                                    import spark.events.IndexChangeEvent;

                                    protected function onSelectionChange(event:IndexChangeEvent):void
                                    {

                                        data.farmerId=cmbFarmers.selectedItem.farmerId;
                                    }     



                                ]]>
                            </fx:Script>
                            </s:ComboBox>

                        </mx:HBox>


            </fx:Component> 
            </mx:itemRenderer>

            </mx:DataGridColumn>

このコードは、データグリッド データ サービスを呼び出し、サービスの再応答時にデータグリッド アレイ コレクションを設定する前に、itemrenderer サービスを呼び出してコンボ ボックス データを取得すると機能します。

ただし、コンボボックスのデータプロバイダーは、そのデータプロバイダー (_acFarmers) で設定された関数の後に変更を取得しないため、警告が表示されます。

これはプロジェクト全体で唯一の警告ですが、解決方法を管理できませんでした。

助けていただければ幸いです。

ありがとう

パオロ

4

2 に答える 2

0

[Bindable]メタタグをセッターの上ではなく上に配置する必要があります_acFarmers。現在、acFarmersプロパティはデータバインディングのソースではないためです。

または、他のアクションを実装しなかったため、getterとsetterの代わりにpublic変数のみを使用することをお勧めします。

データバインディングに関するリンク

于 2012-06-04T05:33:04.140 に答える
0

アイテム レンダラーまたはアイテム エディターで dataChange イベントを使用できる dataChangeEvent を使用してみてください。Flex は、data プロパティが変更されるたびに dataChange イベントを送出します。

<mx:ItemRenderer dataChange="someFunction()">

また

dataToDisplay.addEventListener( FlexEvent.DATA_CHANGE, dataChange );
于 2012-06-16T13:25:39.357 に答える