3

可能重复:
ExtJS 4 及其新的 MVC:网格:如何处理键?

我需要将键监听器添加到 Ext.grid.Panel(即空格键监听器,左,右)。实际上我需要在 Panel 上捕获 'keyup' 或其他一些与关键相关的事件。我尝试了一切,但没有成功。有人有什么想法吗?我正在使用 Extjs 4。

4

2 回答 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 回答