Flex:在自定义 itemrenderer 中获取用于 Spark 数据网格的列索引 [英] Flex: get column index in custom itemrenderer for spark datagrid
问题描述
我正在尝试对 spark DataGrid
中的所有列使用相同的自定义渲染器.我需要知道 dataField
或 columnIndex
,我可以根据它们在我的自定义 itemrenderer 中更改 state
.
在之前的 mx:DataGrid 中,这可以通过扩展实现 IDropInListItemRenderer
的 MXDataGridItemRenderer
来实现,因此 dataGridListData
属性可用.
但是使用 spark DataGrid,我扩展了 GridItemRenderer
,它没有实现 IDropInListItemRenderer
,因此无法访问 dataGridListData
属性.我试图编写一个扩展 GridItemRenderer
并实现 dataGridListData
的动作脚本类,但 flex 在此变量的 set
函数中引发错误.>
有人能帮我完成这个吗?
//用于 mx:DataGrid
[工作代码]
<![CDATA[导入 mx.events.FlexEvent;导入 scripts.valueObjects.CellRendererVO;私有变量 _cellRenderer:CellRendererVO = 新 CellRendererVO();[可绑定]私有变量_lineColor:uint = 0xFF0000;[可绑定]私有变量_lineWidth:int = 5;覆盖公共函数集数据(值:对象):无效{//能够访问dataGridListData.dataField变量_cellRenderer = (value[dataGridListData.dataField] as CellRendererVO);currentState = _cellRenderer.stateName;}私有函数connectingLinesState_enterStateHandler(event:FlexEvent):void{}受保护的函数 orgChartNodeState_enterStateHandler(event:FlexEvent):void{}]]></fx:脚本><s:State name="emptyState"/><s:State name="orgChartNodeState" enterState="orgChartNodeState_enterStateHandler(event)"/><s:State name="connectingLinesState" enterState="connectingLinesState_enterStateHandler(event)"/></s:states><s:HGroup width="100%" height="100%" includeIn="orgChartNodeState"水平对齐=中心"垂直对齐=中间"></s:HGroup><s:HGroup width="100%" height="100%" includeIn="connectingLinesState"间隙=0"水平对齐=中心"垂直对齐=中间"paddingLeft="0" paddingRight="0" paddingTop="0"paddingBottom="0"></s:HGroup>
//示例 spark DataGrid itemRenderer [不工作]
包 customComponents.myOrgChart{导入 mx.controls.dataGridClasses.DataGridListData;导入 mx.controls.listClasses.BaseListData;导入 mx.controls.listClasses.IDropInListItemRenderer;导入 mx.controls.listClasses.IListItemRenderer;
import spark.components.gridClasses.GridItemRenderer;公共类 TestRenderer 扩展 GridItemRenderer 实现 IListItemRenderer、IDropInListItemRenderer{私有变量 _listData:BaseListData;公共函数 TestRenderer(){极好的();}覆盖公共函数集数据(值:对象):无效{//Flex 在这里抛出错误.//错误:类型错误:错误 #1009:无法访问空对象引用的属性或方法.trace('dataField:' + DataGridListData(listData).dataField);}公共函数获取 listData():BaseListData{返回_listData;}公共函数集 listData(value:BaseListData):void{_listData = 值;}}
}
谢谢,
安吉
Spark GridItemRenderer 仍然有一个 data
属性,就像任何其他 ItemRenderer 一样,所以你没问题.
除此之外,您还需要 column 属性,返回 GridColumn 实例.这与您在创建 DataGrid 时可能在 mxml 中定义的实例相同,因此它具有其所有属性.您最常用的是 dataField 和 columnIndex.
例如:
var value:* = data[column.dataField];var index:int = data[column.columnIndex];
I am trying to use the same custom renderer for all the columns in a spark DataGrid
. I need to know the dataField
or columnIndex
based on which I can change state
in my custom itemrenderer.
Earlier in mx:DataGrid, this can be achieved by extending the MXDataGridItemRenderer
which implements IDropInListItemRenderer
and hence dataGridListData
property is available.
But using the spark DataGrid, I am extending the GridItemRenderer
which DOES NOT implement the IDropInListItemRenderer
and hence unable to access dataGridListData
property. I have tried to write an action script class extending GridItemRenderer
and implementing dataGridListData
but flex throws an error in the set
function of this variable.
Can anyone help me in accomplishing this?
// Sample itemRenderer used for mx:DataGrid
[Working Code]
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import scripts.valueObjects.CellRendererVO;
private var _cellRenderer:CellRendererVO = new CellRendererVO();
[Bindable]
private var _lineColor:uint = 0xFF0000;
[Bindable]
private var _lineWidth:int = 5;
override public function set data(value:Object):void
{
//able to access the dataGridListData.dataField variable
_cellRenderer = (value[dataGridListData.dataField] as CellRendererVO);
currentState = _cellRenderer.stateName;
}
private function connectingLinesState_enterStateHandler(event:FlexEvent):void
{
}
protected function orgChartNodeState_enterStateHandler(event:FlexEvent):void
{
}
]]>
</fx:Script>
<s:states>
<s:State name="emptyState" />
<s:State name="orgChartNodeState" enterState="orgChartNodeState_enterStateHandler(event)"/>
<s:State name="connectingLinesState" enterState="connectingLinesState_enterStateHandler(event)"/>
</s:states>
<s:HGroup width="100%" height="100%" includeIn="orgChartNodeState"
horizontalAlign="center" verticalAlign="middle">
</s:HGroup>
<s:HGroup width="100%" height="100%" includeIn="connectingLinesState"
gap="0" horizontalAlign="center" verticalAlign="middle"
paddingLeft="0" paddingRight="0" paddingTop="0"
paddingBottom="0">
</s:HGroup>
// sample spark DataGrid itemRenderer [NOT Working]
package customComponents.myOrgChart { import mx.controls.dataGridClasses.DataGridListData; import mx.controls.listClasses.BaseListData; import mx.controls.listClasses.IDropInListItemRenderer; import mx.controls.listClasses.IListItemRenderer;
import spark.components.gridClasses.GridItemRenderer;
public class TestRenderer extends GridItemRenderer implements IListItemRenderer, IDropInListItemRenderer
{
private var _listData:BaseListData;
public function TestRenderer()
{
super();
}
override public function set data(value:Object):void
{
//Flex throws error here.
//ERROR: TypeError: Error #1009: Cannot access a property or method of a null object reference.
trace('dataField: ' + DataGridListData(listData).dataField);
}
public function get listData():BaseListData
{
return _listData;
}
public function set listData(value:BaseListData):void
{
_listData = value;
}
}
}
Thanks,
Anji
The Spark GridItemRenderer still has a data
property, just as any other ItemRenderer does, so you're fine there.
What you need in addition to that is the column property, which returns a GridColumn instance. This is the same instance you probably defined in mxml when creating the DataGrid, hence it has all its properties. The ones you'll use most are dataField and columnIndex.
For instance:
var value:* = data[column.dataField];
var index:int = data[column.columnIndex];
这篇关于Flex:在自定义 itemrenderer 中获取用于 Spark 数据网格的列索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!