Flex DataGrid: добавление прослушивателя элемента в ячейку для прослушивания ITEM_EDIT_BEGIN в другой ячейке той же строки

Я немного озадачен тем, как я должен делать что-то.

У меня есть FlexDataGrid с кучей столбцов. Один из столбцов имеет ItemRenderer для него. Я хочу, чтобы все ячейки в этом столбце прослушивали событие. Событие, которое я хочу прослушать, - это когда кто-то начинает редактировать ячейку в той же строке, в которой находится ячейка ItemRenderered.

Итак, у меня есть этот код в моем ItemRenderer, который применяется к каждой ячейке в столбце:

this.addEventListener(FlexDataGridEvent.ITEM_EDIT_BEGINNING, showPopUp);

Когда вызывается showPopUp, под этим ItemRenderer появится кнопка.

Проблема в том, что я не знаю, как заставить этот eventListener работать. Как я могу сообщить этому средству визуализации, когда событие ITEM_EDIT_BEGINNING происходит в другой ячейке?

Я полностью в тупике.

Спасибо!

1 ответ

Решение

Ваше средство визуализации элементов на самом деле является другим компонентом, поэтому, если вы отправляете их с помощью ключевого слова this, другие ячейки / средства визуализации элементов их не видят.

Возможно, немного сложнее, чем вы ожидали, но это то, как вы могли бы сделать что-то подобное

1) Вы захотите создать пользовательское событие, с которым вы можете передать номер строки. Примерно так будет работать:

package
{
    import flash.events.Event;

    public class EditRowEvent extends Event
    {
        public function EditRowEvent(type:String, rowEditingIn:Number, bubbles:Boolean=false, cancelable:Boolean=false)
        {
            rowEditing = rowEditingIn;
            super(type, bubbles, cancelable);
        }

        public var rowEditing : Number;
    }
}

2) вам нужно при редактировании отослать что-либо, что может видеть все элементы рендера. Что-то вроде родительской сетки:

DataGrid(this.parentDocument).dispatchEvent( new EditRowEvent( 'beginEdit', this_renderers_row ) );

3) Вам также необходимо прослушать это событие на родительском объекте (сделайте это при инициализации средства визуализации элементов):

protected function onCreationComplete(event:FlexEvent=null):void
        {
            DataGrid(this.parentDocument).addEventListener( 'beginEdit' , handleEditOnRow );
        }

4) обрабатывать то, что вы хотите, чтобы произошло, когда это редактирование начинается в строке этого конкретного средства визуализации элементов

        public function handleEditOnRow ( event : EditRowEvent ) : void {
            if( this_renderers_row == event.rowEditing ){
                // code to execute when someone starts editing this row!
            }
        }
Другие вопросы по тегам