我正在创建一个用于管理我县环境资源的开源应用程序。
我在数据提供程序上遇到了一个问题,我在数据网格上使用了itemrenderer(combobox)。 该应用程序工作,但我收到一个警告,说明itemrenderer dataprovider将不会使用setter重新分配其更新的数据。即使我不需要重新分配组合框项目渲染器数据提供者,为了最佳实践,我想解决此警告。
这是我用来获取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数据服务之前调用itemrenderer服务来获取组合框数据并在服务的响应时设置datagrid arraycollection,则此代码有效。
但是显示警告是因为组合框数据提供者在其数据提供者(_acFarmers)上设置函数后不会得到更改。
这是我对整个项目的唯一警告,但我没有管理如何解决它。
我真的很感激任何帮助。
由于
保
答案 0 :(得分:0)
您必须将[Bindable]
元标记放在您的setter上方而不是_acFarmers
之上。因为现在您的acFarmers
属性不是数据绑定的来源。
或者更好地使用公共变量而不是getter和setter,因为你没有在其中实现其他操作。
答案 1 :(得分:0)
尝试使用dataChangeEvent 您可以将dataChange事件与项呈示器或项目编辑器一起使用。每次数据属性更改时,Flex都会调度dataChange事件。
<mx:ItemRenderer dataChange="someFunction()">
或
dataToDisplay.addEventListener( FlexEvent.DATA_CHANGE, dataChange );