0

仅限 GX​​T 3.x。

对我来说越来越明显的是,Sencha 故意设计 FileUploadField 来阻止所有按键事件被检测到。

我试图拦截 onBrowserEvent(Event) 并且无法检测到我在关注 FileUploadField 组件时由按键生成的任何按键事件。

按键事件分流在哪里?

我找不到任何按键处理程序插入方法。

我希望允许通过按空格键或输入键来触发文件上传。

如果没有从头开始重写一个全新的组件,有人可以告诉我我能做些什么来实现键盘激活文件上传的目标吗?

4

1 回答 1

3

onBrowserEvent除非您沉没它们,否则不会收到任何事件-您确定要打电话sinkEvents吗?你是如何添加处理程序的?如果您使用addDomHandler,它将为您接收它们,但addHandler假设它们不是 dom 事件,或者您已经调用了sinkEvents. 如果不接收事件,浏览器不知道将该事件传递给 GWT 小部件。如果所有事件都是自动下沉的,那么每次您在页面上移动鼠标时,您都会看到事件的风暴,因为 mousemove 会为您传递的每个小部件及其所有父级触发。

如果您 override onBrowserEvent,那么您正在构建描述如何处理来自浏览器的实际事件的方法 - 这是com.google.gwt.user.client.DOM类连接到 Widget 以为其提供事件的地方。如果没有使该方法成为最终方法,那么只要浏览器正在生成这些事件并将它们传递给事件侦听器,就无法阻止您(小部件用户)获取这些事件。

即使 onBrowserEvent 已被覆盖并成为最终事件,您仍然NativePreviewHandler可以通过创建 a并检查事件发生的位置来访问许多事件。这让您在事件进入小部件本身之前就进入事件 - 您可以在那里调用NativePreviewEvent.cancel()以防止它在小部件本身上发生,或者您可以在处理程序的早期处理它。

于 2013-04-26T00:20:17.343 回答