Apache flex Flex中的调试焦点和事件传播
我有一个自定义的Apache flex Flex中的调试焦点和事件传播,apache-flex,actionscript-3,debugging,Apache Flex,Actionscript 3,Debugging,我有一个自定义的TitleWindow组件,该组件已注册以侦听来自用户的键盘事件(以便esc关闭窗口、输入保存等)。然而,在我的测试中,我发现了一些键盘事件处理程序无法启动的情况 关于为什么会发生这种情况,我最好的猜测是,某个地方的某个子组件窃取了焦点,阻止了键盘事件的传播。不幸的是,由于我的标题窗口中有大量组件,我无法很好地知道是谁偷走了焦点 那么,我的问题是,在Flex中是否有调试焦点问题和事件传播的好技巧/技术/工具?基本上,我需要一些东西来告诉我谁在任何给定的时间有焦点,谁在任何给定的时
TitleWindow
组件,该组件已注册以侦听来自用户的键盘事件(以便esc关闭窗口、输入保存等)。然而,在我的测试中,我发现了一些键盘事件处理程序无法启动的情况
关于为什么会发生这种情况,我最好的猜测是,某个地方的某个子组件窃取了焦点,阻止了键盘事件的传播。不幸的是,由于我的标题窗口
中有大量组件,我无法很好地知道是谁偷走了焦点
那么,我的问题是,在Flex中是否有调试焦点问题和事件传播的好技巧/技术/工具?基本上,我需要一些东西来告诉我谁在任何给定的时间有焦点,谁在任何给定的时间处理事件。。。这可能吗?您可以调用getFocus(),您将收到当前具有焦点的back
从这里,您可以通过使用和相应地采取行动来确定哪种类型的对象窃取了焦点
对于任何给定时间的事件处理,您都希望将e.target与e.currentTarget进行比较。我刚刚发现以下技术可能对调试焦点问题非常有用:
private function handleTextInputFocus(event:FocusEvent):void {
try {
throw new Error('test');
} catch (e:Error) {
trace(e.getStackTrace());
}
}
堆栈可以解释文本输入从另一个组件窃取焦点的原因。谢谢,Tegeril,通过使用FocusManager,我能够发现谁窃取了焦点并使用了键盘事件,问题解决了!关于您的事件处理解决方案,我要提到的一件事是,因为没有调用我的处理程序,所以我没有地方断点并检查e.target和e.currentTarget。当您既不控制发送事件的项目,也不控制处理事件的项目时,这是一个非常棘手的情况!啊,关于这些事件的观点很好。我想不出一种方法来捕获非冒泡事件,如果它们在你没有听到的对象上触发,也许有人可以提供一些输入并启发我们:)