我有一个包含许多自定义组件的flex应用程序,如自定义按钮,组合框等。我正在尝试将keyBoard快捷方式添加到flex应用程序。在这样做的过程中,我向应用程序添加了一个按键式监听器,以便像这样收听ctrl+shift
组合键:
this.stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);
然后我发送一个自定义事件,我的所有自定义组件都在监听:
private function reportKeyDown(event:KeyboardEvent):void
{
var evtObj:Object = new Object();
evtObj.keyEvent = event;
dispatchEvent(new CustomEvent(CustomEvent.SHORTCUT_KEYS_PRESSED, evtObj, true, false));
}
在我的自定义按钮组件中,我有:
this.addEventListener(CustomEvent.SHORTCUT_KEYS_PRESSED, ShortCutKeysHandler, true);
所以,如果我去ctrl+shift+W
,那么我想要点击一个自定义按钮的实例。
出于某种原因,事件永远不会被触发,永远不会进入ShortCutKeysHandler
函数。
有谁知道怎么做?
答案 0 :(得分:2)
我的猜测是你的活动没有冒充听众。如果您正在严格查找键盘事件,并且不需要任何额外的有效负载,那么简单地监听您感兴趣的组件中的舞台事件可能会更有效,或者让舞台调度您的自定义事件并使用阶段感兴趣的组件中的.addEventListener ,而不是 this.addEventListener 。
作为惯例,我从不依赖于事件冒泡。它会混淆您的应用程序并产生歧义。最好明确定义事件结构以获得对应用程序的额外控制,并使调试更容易。