Гибкая реализация IDropInListItemRenderer в пользовательском элементе визуализации элементов с использованием класса ItemRenderer

Я делаю Custom ItemRenderer во Flex, который предназначен для DataGrid. Моя проблема в том, что мне нужно иметь возможность использовать listData, чтобы я мог выяснить, в какой текущей строке находится ItemRenderer. Хотя я не могу правильно реализовать IDropInListItemRenderer, потому что независимо от того, какие listData для меня всегда нулевые.

Вот мой код вверху:

<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:s="library://ns.adobe.com/flex/spark" autoDrawBackground="false" styleName="gRenderer" dataChange="setStates()" implements=" mx.controls.listClasses.IDropInListItemRenderer">

И тогда у меня есть:

 private var _listData:BaseListData;

И тогда у меня есть:

public function get listData():BaseListData {
        return this._listData;
    }

    public function set listData( value:BaseListData ):void {
        this._listData = value;
    }

Но затем в моем методе данных set я пытаюсь сделать это:

 override public function set data( value:Object ):void {
        super.data = value;
       var row : int = listData.rowIndex;
    }

Но во время выполнения он выдает ошибку, говоря, что пытается получить доступ к свойству нулевого объекта. В моем отладчике я вижу, что listData имеет значение null. Я не могу понять, почему. Из того, что я читал везде онлайн, кажется, что я делаю все необходимое. Что мне не хватает?

Спасибо!

1 ответ

Похоже, вы создаете пользовательский ItemRenderer для сетки данных искры. Если это так, вместо использования базового класса s:ItemRenderer используйте s:GridItemRenderer. Существует публичное свойство rowIndex, на которое вы можете ссылаться.

override public function set data( value:Object ):void {
    super.data = value;
    trace(rowIndex);
}
Другие вопросы по тегам