我需要将键监听器添加到 Ext.grid.Panel(即空格键监听器,左,右)。实际上我需要在 Panel 上捕获 'keyup' 或其他一些与关键相关的事件。我尝试了一切,但没有成功。有人有什么想法吗?我正在使用 Extjs 4。
问问题
6705 次
2 回答
6
如果一个组件不直接暴露关键事件,你需要做一些工作。这可能不是解决此问题的最佳方式,但这是一个开始。
第一个技巧是知道某些 DOM 元素(例如div
,除非它们具有选项卡索引)不会触发键事件。所以做这样的事情:grid.getEl().set({tabindex: "0"})
让事情滚动起来。
现在您的网格元素将触发关键事件。下一步是添加一个针对您的网格的 KeyMap。有几种方法可以做到这一点,但这是一个很好的方法:
grid.getEl().addKeyMap({
eventName: "keyup",
binding: [{
key: Ext.EventObject.SPACE,
fn: function(){ console.log("Space key pressed"); }
},{
key: [Ext.EventObject.LEFT, Ext.EventObject.RIGHT],
shift: true,
fn: function(){ console.log("Left or right pressed while pressing shift"); }
}]
});
基本上,binding
是一组对象,它们指定一个或多个要侦听的键和要触发的函数。如果您查看Ext.util.KeyMap文档,您可以了解更多信息。
注意eventName
上面的使用。您可以为每个 KeyMap 设置一种类型的事件。因此,如果您想同时绑定 keydown 和 keyup 事件,则需要在同一个元素上使用两个 KeyMap。
于 2012-08-27T23:49:36.333 回答
0
对于初学者,请查看KeyMap。
于 2012-08-27T23:47:35.277 回答