2012-08-27 21 views

回答

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是指定一個或多個鍵,監聽和功能觸發對象的數組。如果您檢查Ext.util.KeyMap文檔,您可以瞭解更多信息。

注意上面的使用eventName。您可以爲每個KeyMap設置一種類型的事件。所以如果你想綁定到keydown和keyup事件,你需要兩個KeyMaps在同一個元素上。

+0

非常感謝,這非常有幫助並解決了我的問題。 – springrules

+0

如果我的答案解決了您的問題,請將我的答案標記爲已接受。 – Eric

相關問題