【发布时间】:2012-02-11 04:31:30
【问题描述】:
我正在尝试对 sparkDataGrid 中的所有列使用相同的自定义渲染器。我需要知道dataField 或columnIndex,据此我可以在我的自定义itemrenderer 中更改state。
在 mx:DataGrid 的早期,这可以通过扩展实现 IDropInListItemRenderer 的 MXDataGridItemRenderer 来实现,因此 dataGridListData 属性可用。
但是使用 spark DataGrid,我扩展了 GridItemRenderer,它没有实现 IDropInListItemRenderer,因此无法访问 dataGridListData 属性。我曾尝试编写一个扩展GridItemRenderer 并实现dataGridListData 的动作脚本类,但flex 在此变量的set 函数中抛出错误。
谁能帮我完成这个?
//mx:DataGrid[工作代码]使用的示例itemRenderer
<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>
// 示例 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;
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;
}
}
}
谢谢,
安吉
【问题讨论】:
标签: actionscript-3 apache-flex datagrid flex4 itemrenderer