簡體   English   中英

更新itemrenderer數據提供程序

[英]Updating itemrenderer dataprovider

我正在創建一個用於管理我縣環境資源的開源應用程序。

我在datagrid上使用的itemrenderer(組合框)的數據提供程序上有問題。 該應用程序可以運行,但是我收到一條警告,說將不會使用setter更新itemrenderer dataprovider數據。 即使我不需要重新分配組合框itemrenderer數據提供程序,出於最佳實踐的考慮,我也想解決此警告。

這是我用來獲取dataprovider數據作為數組集合的常用代碼,該數組集合是從itemrenderer的parentDocument中的Web服務結果填充的:

//set farmers arrayCollection values for combobox itemrenderer
    [Bindable]
    private var _acFarmers:ArrayCollection=new ArrayCollection;
    public function set acFarmers(acFarmers:ArrayCollection):void{
        _acFarmers=acFarmers;

    }
    //get machines ArrayCollection values
    public function get acFarmers():ArrayCollection{
        return _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>

如果我在調用datagrid數據服務並在響應服務時設置datagrid arraycollection之前調用itemrenderer服務以獲取組合框數據,則此代碼有效。

但是會顯示警告,因為在其數據提供程序(_acFarmers)設置功能后,組合框數據提供程序將不會更改。

這是我對整個項目的唯一警告,但我沒有設法解決它。

我真的很感謝您的幫助。

謝謝

保羅

您必須將[Bindable]元標記放在設置器的上方,而不是_acFarmers的上方。 因為現在您的acFarmers屬性不是數據綁定的源。

或者最好只使用公共變量,而不要使用getter和setter,因為您沒有在其中執行其他操作。

有關數據綁定的鏈接

嘗試使用dataChangeEvent時,可以將dataChange事件與項目渲染器或項目編輯器一起使用。 每當數據屬性更改時,Flex都會調度dataChange事件。

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

要么

dataToDisplay.addEventListener( FlexEvent.DATA_CHANGE, dataChange );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM