3

重複の可能性:
ExtJS 4とその新しいMVC:グリッド:キーの処理方法は?

Ext.grid.Panelにキーリスナーを追加する必要があります(つまり、スペース、左、右のキーリスナー)。実際、Panelで「keyup」またはその他のキー関連のイベントをキャッチする必要があります。私はすべてを試しましたが、成功しませんでした。誰かが何か考えを持っていますか?Extjs4を使用しています。

4

2 に答える 2

6

コンポーネントが主要なイベントを直接公開しない場合は、少し作業が必要です。これは最善の方法ではないかもしれませんが、これが始まりです。

div最初の秘訣は、タブ インデックスがない限りキー イベントを発生させないDOM 要素などを知っておくことです。だから、次のようなことをしてください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は、リッスンする 1 つ以上のキーとトリガーする関数を指定するオブジェクトの配列です。Ext.util.KeyMapのドキュメントを確認すると、詳細を知ることができます。

上記の使用に注意してくださいeventName。KeyMap ごとに 1 つのタイプのイベントを設定できます。したがって、keydown イベントと keyup イベントの両方にバインドする場合は、同じ要素に 2 つの KeyMap が必要です。

于 2012-08-27T23:49:36.333 に答える
0

手始めに、KeyMapを見てください。

于 2012-08-27T23:47:35.277 に答える