![]() |
|
||||||||||
|
|
|
|||||
|
Возможно ли отследить на каком конкретно элементе дерева был вызван ContextMenuEvent? Повешал так:
private function initContextMenu():void
{
this.contextMenu = new ContextMenu();
this.contextMenu.hideBuiltInItems();
this.contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, this.contextMenuAddEvent);
contextMenuAdd = new ContextMenuItem("Добавить подкатегорию");
this.contextMenu.customItems.push(contextMenuAdd);
//contextMenuAdd.addEventListener(ContextMenuEvent.MENU_SELECT, contextMenuAddEvent);
}
public function contextMenuAddEvent(event:ContextMenuEvent):void
{
trace(event.mouseTarget);
}
Или придется инициализировать контекстное меню для ItemRenderer-a? |
|
|||||
|
Написал рендерер:
package CellRenderers
{
import mx.controls.treeClasses.*;
import mx.collections.*;
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;
import flash.ui.ContextMenuBuiltInItems;
import flash.events.ContextMenuEvent;
import flash.events.ContextMenuEvent;
public class ETreeItemRenderer extends TreeItemRenderer
{
private var contextMenuAdd:ContextMenuItem;
public function ETreeItemRenderer()
{
super();
mouseEnabled = false;
initContextMenu();
}
public function contextMenuAddEvent(event:ContextMenuEvent):void
{
trace(1);
}
private function initContextMenu():void
{
this.contextMenu = new ContextMenu();
this.contextMenu.hideBuiltInItems();
this.contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, this.contextMenuAddEvent);
contextMenuAdd = new ContextMenuItem("Добавить подкатегорию");
this.contextMenu.customItems.push(contextMenuAdd);
contextMenuAdd.addEventListener(ContextMenuEvent.MENU_SELECT, this.contextMenuAddEvent);
}
}
}
|
|
|||||
|
Неа. Где могу - сам ищу. Если не получается найти здесь спрашиваю.
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Везде не получается
![]() |
|
|||||
|
Вроде как вот это забыл добавить callTree.contextMenu=m; (callTree просто id дерева )
|
|
|||||
|
Регистрация: Sep 2006
Сообщений: 2
|
Используй ContextMenuManager, написанный by Nirth - http://orangeflash.eu/?p=90, хорошая вещь
|
|
|||||
|
Ну и причем тут контекст меню манагер??? И Нирт тоже молодца, как что ничего-непонятно-делай-приятель-сам-свой-проект или форум-для-того-чтобы-общаться-а-не-решать-проблемы
Сабж топика злой - приходиться повторить - люди кто знает как отловить возможно отследить на каком конкретно элементе дерева был вызван ContextMenuEvent? Потому как полный писец. |
|
|||||
|
Решил проблему.
1. Пишем свой итемрендерер. 2. Отлавливаем маусовер и записываем в какею-либо переменную дерева данный элемент. 3. В дереве при вызове контекстного меню проверяем эту переменную Код итемрендерера: package CellRenderers.Classes
{
import mx.controls.treeClasses.*;
import mx.collections.*;
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;
import flash.ui.ContextMenuBuiltInItems;
import flash.events.ContextMenuEvent;
import flash.events.ContextMenuEvent;
import flash.events.MouseEvent;
import editor.ETree;
public class ETreeItemRenderer extends TreeItemRenderer
{
public function ETreeItemRenderer()
{
super();
this.addEventListener(MouseEvent.MOUSE_OVER, mouseOverEvent);
}
public function mouseOverEvent(event:MouseEvent):void
{
var myListData:TreeListData = TreeListData(listData);
var eTree:ETree = ETree(this.listData.owner);
eTree.setOverItem(myListData);
}
}
}
Обработка в дереве: public class ETree extends Tree
{
...
public var overItem:TreeListData;
...
public function treeContextMenuEvent(event:ContextMenuEvent):void
{
selectedItem = overItem.item;
//If toplevel category then disable first menu item
if (TreeListData(overItem).depth==1)
{
contextMenu.customItems[0].enabled = false;
}
}
}
|
![]() |
![]() |
Часовой пояс GMT +4, время: 21:57. |
|
|
« Предыдущая тема | Следующая тема » |
|
|