仅限 GXT 3.x。
对我来说越来越明显的是,Sencha 故意设计 FileUploadField 来阻止所有按键事件被检测到。
我试图拦截 onBrowserEvent(Event) 并且无法检测到我在关注 FileUploadField 组件时由按键生成的任何按键事件。
按键事件分流在哪里?
我找不到任何按键处理程序插入方法。
我希望允许通过按空格键或输入键来触发文件上传。
如果没有从头开始重写一个全新的组件,有人可以告诉我我能做些什么来实现键盘激活文件上传的目标吗?
仅限 GXT 3.x。
对我来说越来越明显的是,Sencha 故意设计 FileUploadField 来阻止所有按键事件被检测到。
我试图拦截 onBrowserEvent(Event) 并且无法检测到我在关注 FileUploadField 组件时由按键生成的任何按键事件。
按键事件分流在哪里?
我找不到任何按键处理程序插入方法。
我希望允许通过按空格键或输入键来触发文件上传。
如果没有从头开始重写一个全新的组件,有人可以告诉我我能做些什么来实现键盘激活文件上传的目标吗?
onBrowserEvent
除非您沉没它们,否则不会收到任何事件-您确定要打电话sinkEvents
吗?你是如何添加处理程序的?如果您使用addDomHandler
,它将为您接收它们,但addHandler
假设它们不是 dom 事件,或者您已经调用了sinkEvents
. 如果不接收事件,浏览器不知道将该事件传递给 GWT 小部件。如果所有事件都是自动下沉的,那么每次您在页面上移动鼠标时,您都会看到事件的风暴,因为 mousemove 会为您传递的每个小部件及其所有父级触发。
如果您 override onBrowserEvent
,那么您正在构建描述如何处理来自浏览器的实际事件的方法 - 这是com.google.gwt.user.client.DOM
类连接到 Widget 以为其提供事件的地方。如果没有使该方法成为最终方法,那么只要浏览器正在生成这些事件并将它们传递给事件侦听器,就无法阻止您(小部件用户)获取这些事件。
即使 onBrowserEvent 已被覆盖并成为最终事件,您仍然NativePreviewHandler
可以通过创建 a并检查事件发生的位置来访问许多事件。这让您在事件进入小部件本身之前就进入事件 - 您可以在那里调用NativePreviewEvent.cancel()
以防止它在小部件本身上发生,或者您可以在处理程序的早期处理它。