如何在AS3 / AIR中的textArea中动态创建上下文菜单?

问题描述

我正在将应用程序从Flex / Flash迁移到Flex / AIR 32。

很多年前,我开始使用可弯曲的SpellCheck模块。它将为textArea创建一个自定义组件,该组件将在拼写错误的单词下划线,然后在上下文菜单显示拼写错误的单词。

我已经成功迁移了它,但是使自定义上下文菜单弹出的唯一方法是非常小心地右键单击文本下方的波浪线,而不是文本本身。当我右键单击文本时,它将显示认的上下文菜单。实际上,它永远不会使用该功能来构建自定义上下文菜单。我将以下代码放置在扩展mx.controls.textArea;的自定义类的各个位置;

private function creationCompleteHandler(event:Event):void
{
    this.contextMenu = new ContextMenu;
    this.contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT,showMenu);
}

在构造函数及其原始位置中包含具有相同行为的createChildren。

在Flex / Flash版本中,右键单击文本将弹出自定义上下文菜单

编辑:

在进行更多调试时,我发现组件内部的“ this.textField”正在触发MouseEvent.CONTEXT_MENU,而它从未触发“ this.contextMenu”事件。

解决方法

好吧,我找到了解决方法。

我使用以下内容创建了事件监听器;

    this.textField.addEventListener(MouseEvent.CONTEXT_MENU,showMenu);

然后我将处理程序更改为使用mouseEvent而不是contextMenuEvent中的事件数据,这似乎可行。