Я пытаюсь использовать один и тот же пользовательский рендерер для всех столбцов в свече DataGrid
.Мне нужно знать dataField
или columnIndex
, на основе которого я могу изменить state
в моем настраиваемом элементе разборки элементов.
Ранее в mx: DataGrid это можно было сделать, расширив MXDataGridItemRenderer
, который реализуетIDropInListItemRenderer
и, следовательно, dataGridListData
свойство доступно.
Но с помощью искровой DataGrid я расширяю GridItemRenderer
, который НЕ реализует IDropInListItemRenderer
и, следовательно, не может получить доступ к свойству dataGridListData
.Я пытался написать класс сценария действия, расширяющий GridItemRenderer
и реализующий dataGridListData
, но flex выдает ошибку в функции set
этой переменной.
Может кто-нибудь помочь мне в этом?
// Образец itemRenderer, используемый для mx:DataGrid
[Рабочий код]
<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>
// образец искры 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;
}
}
}
Спасибо,
Anji