我正在尝试设置一个包含一列组合框的DataGrid。组合框的值由特定于该行的数据定义。我不能让这个工作起来,我要求解决这个问题,要么修复下面的内容,要么以不同的方式推荐。
我的DataGrid的一列有一个派生自ItemEditor的ComboBox的对象。 itemEditor设置如下:
<mx:DataGridColumn editorDataField="selectedItem" dataField="type" editable="true" >
<mx:itemEditor>
<mx:Component>
<FilterCell:SelectCellBase initialize="set_combo()" grid="{this}"/>
</mx:Component>
</mx:itemEditor>
</mx:DataGridColumn>
因此,当生成itemEditor时(当用户双击单元格时),将填充数据。
然后,SelectCellBase set_combo()函数定义如下:
public function set_combo( ) : void
{
var type : String = grid.dataProvider[grid.selectedIndex]['type'];
if( 'text' == type )
{
this.dataProvider = text;
}
else
{
this.dataProvider = number;
}
}
这个实现不起作用,因为当我尝试调用grid.selectedIndex时,这似乎总是返回-1。
我做错了什么,或者有什么更好的方法可以做到这一点?
答案 0 :(得分:1)
您的问题是,当您在<mx:Component>
内时,范围是本地的,并且不再设置为外部MXML文件。所以当你有:
<mx:Component>
<FilterCell:SelectCellBase initialize="set_combo()" grid="{this}"/>
</mx:Component>
您所指的“this”是您定义的内联组件,而不是您正在处理的基本MXML组件。简单的解决方法是将其更改为
<mx:Component>
<FilterCell:SelectCellBase initialize="set_combo()" grid="{outerDocument}"/>
</mx:Component>
当你在<mx:Component>
标签内时,会自动设置outerDocument变量,并且可以用来访问父范围内所需的任何内容。