2012-06-03 4 views
0

Я создаю приложение с открытым исходным кодом для управления ресурсами окружающей среды в моем округе.Обновление itemrenderer dataprovider

У меня проблема с dataprovider для itemrenderer (combobox), который я использую на datagrid. Приложение работает, но я получаю предупреждение о том, что dataprovider itemrenderer не будет переназначать данные в своем обновлении установщиком. Даже если мне не нужно переназначать dataprovider itembenderer combobox, в отношении наилучшей практики я бы хотел решить это предупреждение.

Это обычный код я использую для получения DataProvider данных в виде коллекции массива заселенной из результата веб-службы в parentDocument в ItemRenderer:

 

    //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> 

Этот код работает, если я вызываю службу ItemRenderer, чтобы получить данные COMBOBOX до вызова службы DataGrid данных и настройка DataGrid ArrayCollection при повторной реакции РЭ rvice.

BUT предупреждение отображается, потому что передатчик данных combobox не будет изменяться после функции набора на своем датапортере (_acFarmers).

Это единственное предупреждение, которое у меня есть для всего проекта, но я не мог решить, как его решить.

Я бы очень признателен за любую помощь.

Благодаря

Paolo

ответ

0

Вы должны поставить [Bindable] метатега над вашим сеттер вместо выше _acFarmers. Потому что прямо сейчас ваше свойство acFarmers не является источником привязки данных.

Или лучше использовать только общедоступную переменную вместо getter и setter, так как вы не реализовали в них другие действия.

Link about databinding

0

Попробуйте использовать DataChangeEvent вы можете использовать событие dataChange с визуализации или редактора элементов. Flex отправляет событие dataChange каждый раз, когда изменяется свойство данных.

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

или

dataToDisplay.addEventListener(FlexEvent.DATA_CHANGE, dataChange); 
Смежные вопросы