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!
}
}