我想爲火花DataGrid
中的所有列使用相同的自定義渲染器。我需要知道dataField
或columnIndex
的基礎,我可以在我的自定義itemrenderer中更改state
。Flex:在自定義itemrenderer中爲火花數據網格獲取列索引
早些時候在mx:DataGrid中,可以通過擴展MXDataGridItemRenderer
實現IDropInListItemRenderer
,因此dataGridListData
屬性可用。
但是使用火花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>
//樣品數據網格火花的itemRenderer [不工作]
包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 2012-01-16 09:49:20
@安吉這真的不應該發生。你並沒有試圖將它轉換爲DataGridListData,對嗎? – RIAstar 2012-01-16 10:43:39
不是。這是我想要做的。在設置數據函數中,我添加了行'data [column.dataField]',我得到了錯誤 – Anji 2012-01-16 13:16:07