Flex: получить индекс столбца в пользовательском элементе разборки элементов для сетки данных spark - PullRequest
0 голосов
/ 16 января 2012

Я пытаюсь использовать один и тот же пользовательский рендерер для всех столбцов в свече 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

1 Ответ

3 голосов
/ 16 января 2012

Spark GridItemRenderer по-прежнему обладает свойством data, как и любой другой ItemRenderer, так что все в порядке.

В дополнение к этому вам нужен столбец свойство, которое возвращает GridColumn экземпляр.Это тот же экземпляр, который вы, вероятно, определили в mxml при создании DataGrid, поэтому он имеет все свои свойства.Больше всего вы будете использовать dataField и columnIndex .

Например:

var value:* = data[column.dataField];
var index:int = data[column.columnIndex];
...