我有一个viewstack,它实现了一个用于执行新订单的“向导”界面。在向导的最后一页上,有一个按钮,上面有一个假加速器,如果按下'o',它们就可以重新开始这个过程。
以下是我的经纪人:
protected function _keyDownHandler(e:KeyboardEvent):void
{
if((e.charCode == 111)) {
// stop the 'o' from getting out
trace("Cancelable : " , e.cancelable);
this.removeEventListener(KeyboardEvent.KEY_DOWN, _keyDownHandler, true);
e.stopImmediatePropagation();
e.preventDefault();
model.orderNew();
}
}
问题在于,当用户返回向导的第1页时,刚输入的用户'o'现在被输入到数据网格过滤文本框中(按姓氏“o”开头的过滤名称),这不是什么是期望的。
正如您所看到的,我已经尝试禁止此交互,但它似乎还不够,即使model.orderNew()
位包含交换视图堆栈页面的所有代码,重新设置重点关注txtSearchFilter等......我很沮丧!
看来e.cancelable == false,这可能就是我得到这种行为的原因..但文档说KEY_DOWN IS 可以取消,所以......我还是迷路了
如何保持按键传播到表单?
由于
答案 0 :(得分:1)
您可以尝试将侦听器更改为使用“捕获”模式而不是冒泡。
addEventListener(KeyboardEvent.KEY_DOWN, _keyDownHandler, true);
有关详细信息,请参阅addEventListener()上的AS3参考。
<小时/> 编辑:实际上,这可能不是直接问题。相反,您可能需要取消
KEY_UP
事件,并在视图的共同祖先上执行此操作。您仍然需要使用捕获模式。
答案 1 :(得分:1)
答案 2 :(得分:0)
if((e.charCode == 111)){ removeEventListener(KeyboardEvent.KEY_DOWN ... }
然后在您需要的时候再次需要它(例如当您将焦点放在其他字段上时)重新启用它