Ext.grid.panel上的关键事件

时间:2012-08-27 19:57:05

标签: extjs4

  

可能重复:
  ExtJS 4 and its new MVC: grid: how to handle keys?

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

2 个答案:

答案 0 :(得分: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事件,则需要在同一元素上使用两个KeyMaps。

答案 1 :(得分:0)

对于初学者,请查看KeyMap