Полезные ссылки

Построитель стилей

Природа не понимает шуток. Она всегда честна, всегда серьёзна, всегда сурова. Она всегда права, а ошибки и промахи делают только люди. Человек, который относится к природе с пренебрижением, не способен её оценить, и только понимающему, чистому и правдивому, она покоряется и открывает свои тайны.
Иоган Вольфнг фон Гёте
Контекстное меню в AdvancedDataGrid
12.10.2009 10:15

Во флексе есть удобный по своей задумке компонент AdvancedDataGrid. Для пользователя это очень удобный компонент, который может делать приятные вещи. Но для разработчиков этот компонент сущая головная боль. Одним из вопросов часто бывает, а как вставить контекстное меню в таблицу, ведь нажатие правой клавиши мыши не приводит к выделению компонента, да из самого события нельзя понять куда же пользователь кликнул мышкой. Следовательно нет возможности правильно отобразить контекстное меню.

Для корректного отображения контекстного меню в таблице есть следующий вариант. Для столбцов, где должно быть контекстное меню надо создать свой ItemRenderer. Это хорошая практика для отображения и редактирования данных. Помимо корректной обработки и отображения данных этот ItemRenderer должен делать следующее:
1. Сформировать нужное меню
2. При появлении мышки над компонентом запомнить старое контекстное меню таблицы и вставить для таблицы нужное контекстное меню.
3. При выходе мышки с компонента надо убрать наше меню и вернуть старое на место.
Вот как это будет выглядеть в коде:
override public function set data(value:Object):void {
removeEventListener(MouseEvent.MOUSE_OVER,onMouseOver);
super.data = value;
....
createMenu();// {1}
addEventListener(MouseEvent.MOUSE_OVER,onMouseOver);
}

//{2}
private function onMouseOver(ev:MouseEvent):void{
createMenu();
prevMenu = AdvancedDataGrid(treeDataItem.owner).contextMenu;
AdvancedDataGrid(treeDataItem.owner).contextMenu = treeNodeMenu;
removeEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
}

//{3}
private function onMouseOut(ev:MouseEvent):void{
AdvancedDataGrid(treeDataItem.owner).contextMenu = prevMenu;
addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
removeEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
}
На сколько я знаю этот вариант создания контекстного меню так же будет работать и с вариантом обычной таблицы.
Комментарии
Добавить новый Поиск
Оставить комментарий
Имя:
Email:
 
Веб-сайт:
Тема:
UBB-Код:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 

!joomlacomment 4.0 Copyright (C) 2009 Compojoom.com . All rights reserved."