Как мне изменить состояние в itemRenderer на основе действия в другом itemRenderer?

У меня есть DataGridColumn с ItemRenderer, который расширяет компонент Box. По умолчанию отображается текстовый компонент. Когда пользователь щелкает текстовый компонент, я изменяю состояние, добавляя дочерний элемент PopUpMenuButton, и делаю текстовый компонент невидимым. Это прекрасно работает. Однако я хочу, чтобы в DataGrid был виден только один PopUpMenuButton (аналогично тому, как работает itemEditor). Я не хочу использовать itemEditor, потому что я столкнулся со слишком многими проблемами, пытаясь заставить его работать в этом случае.

Я реализую IDropInListItemRenderer в моем itemRenderer, чтобы получить доступ к свойству listData, которое даст мне владельца (DataGrid), но я не знаю, как «отключить» состояние «редактирования» в других itemRenderers в DataGrid.

Как я могу этого добиться?

Спасибо.


person Eric Belair    schedule 17.12.2008    source источник


Ответы (1)


Вот так. Я просто добавил прослушиватель событий изменений в listData.owner - если он срабатывает, я обновляю currentState до нуля. Работает как шарм. Намного проще, чем пытаться получить доступ к itemRenderers в столбце и сбросить их все. Лучше по производительности.

private function label_clickHandler():void
{
    showEditor();
}

private function showEditor():void
{
    this.currentState = "editingMode";

    var ownerListBase:ListBase = ListBase(listData.owner);

    ownerListBase.addEventListener(ListEvent.CHANGE, ownerListBase_changeHandler);
}

private function ownerListBase_changeHandler(event:ListEvent):void
{
    this.currentState = null;

    var ownerListBase:ListBase = ListBase(listData.owner);

    ownerListBase.removeEventListener(ListEvent.CHANGE, ownerListBase_changeHandler);
}
person Eric Belair    schedule 17.12.2008