在一个Datagrid里面的一列用itemRenderer做了一个Combobox。代码是前辈的。自己拿过来用。发现只要改其中一列的Combox选项。再去用鼠标点任何一个地方,该Combobox里面的选项就会跳到第一个选项上面去。但是其他页面我用到的地方却不出现这个问题。
百思不得其解!
唯一不同的地方就是数据源。虽然都是ArrayCollection,但是里面装的对象不同。导致datafield的字段不同。但是我也方法里面照着写了的。
部分代码如下:
<mx:DataGrid id="gd_ipaccount" editable="true" dataProvider="{accountips}" x="0" y="32" width="100%" height="100%">
<mx:columns>
<mx:DataGridColumn editable="true" headerText="信任IP" dataField="trust_ipaddr"/>
<mx:DataGridColumn editable="true" headerText="账号" dataField="app_account"/>
<mx:DataGridColumn itemRenderer="components.policy.gather.New_nbaauditSelect" rendererIsEditor="true" headerText="审计选项" dataField="viewfield"/>
</mx:columns>
</mx:DataGrid>
components.policy.gather.New_nbaauditSelect部分源代码:
override public function get data():Object
{
if(_data!=null)
{
if(this.selectedItem!=null)
{
if(_data.hasOwnProperty("viewfield"))
{
_data.viewfield = this.selectedItem.data;
}
if(_data.hasOwnProperty("audit_type")){
if(this.selectedItem == auditselect[0])
{
_data.audit_type = 0;
}else if(this.selectedItem == auditselect[1]){
_data.audit_type = 1;
}else if(this.selectedItem == auditselect[2]){
_data.audit_type = 2;
}
}
}
}
return _data;
}
后来发现rendererIsEditor="true"是指渲染来源的。大概的意思是:如果是true,表示渲染来源来源于components.policy.gather.New_nbaauditSelect。效果上显示ComboBox.
如果为false,表示结果来源于Datagrid,效果上就是显示viewfield的值。(注:我之前用的是一个int类型的字段)。我把rendererlsEditor设为false。发现先前int类型的值改变后。combobox的set data() 方法运行成功。我怀疑是我的get data() 方法没有起作用。
抱着试试的态度我吧他改成了String类型。结果就成功了。而且我set data() 方法audit_type字段设置成功。
override public function get data():Object
{
if(_data!=null)
{
if(this.selectedItem!=null)
{
if(_data.hasOwnProperty("viewfield"))
{
_data.viewfield = this.selectedItem.data;
}
if(_data.hasOwnProperty("audit_type")){
if(this.selectedItem == auditselect[0])
{
_data.audit_type = 0;
}else if(this.selectedItem == auditselect[1]){
_data.audit_type = 1;
}else if(this.selectedItem == auditselect[2]){
_data.audit_type = 2;
}
}
}
}
return _data;
}