我正在创建一个开源应用程序来管理我所在县的环境资源。
我在数据网格上使用的 itemrenderer(组合框)的数据提供程序有问题。该应用程序可以工作,但我收到一条警告,说 itemrenderer 数据提供程序不会在使用 setter 更新时重新分配数据。即使我不需要重新分配组合框 itemrenderer 数据提供者,作为最佳实践我想解决这个警告。
这是我用来获取 dataprovider 数据的常用代码,它是从 itemrenderer 的 parentDocument 中的 Web 服务结果填充的数组集合:
//为组合框itemrenderer设置农民arrayCollection值 [可绑定] 私人 var _acFarmers:ArrayCollection=new ArrayCollection; 公共函数集 acFarmers(acFarmers:ArrayCollection):void{ _acFarmers=acFarmers; } //获取机器ArrayCollection值 公共函数获取 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>
如果我在调用 datagrid 数据服务并在服务响应时设置 datagrid arraycollection 之前调用 itemrenderer 服务以获取组合框数据,则此代码有效。
但是会显示一条警告,因为组合框数据提供者在对其数据提供者 (_acFarmers) 设置函数后不会得到更改。
这是我对整个项目的唯一警告,但我没有设法解决它。
我真的很感激任何帮助。
谢谢
保罗