2013-02-01 105 views
3

我想單個選擇網格,起初我沒有包含任何選擇模型配置,因爲那是the default。這適用於鼠標選擇,但如果我鍵SHIFT + END它選擇所有記錄(或PAGE UP,HOMEEND具有類似的效果)。防止鍵盤多選網格面板

如果沒有重新加載網格,選定的記錄無法取消選擇(除非我想要一個配置爲allowDeselect: true的網格 - 我不這麼做)。

認爲這是ExtJS有關默認文檔的問題,然後我配置了網格面板SINGLE明確選擇,但仍然有問題。

我檢查了他們的一些例子格架here,他們都有同樣的問題 - 任何一個選擇電網將防止鼠標多選,但可以用shift鍵和HOMEENDPAGE UPPAGE DOWN被multiselected。然後是不可能取消選擇記錄。

似乎是一個框架中的錯誤,我將提交一份報告,但由於網格是最常用的組件之一,我認爲有人對此有一個解決方法。

無奈之下,我也嘗試在全球範圍內傾聽keypress並停止活動,但這甚至不會這樣做。例如,這將登錄到控制檯,但無論如何事件運行:

Ext.getDoc().on('keypress', function(event, target) { 
    var key = event.getKey(); 

    // do not allow multiple grid selection 
    if (event.shiftKey && (
     key == event.PAGE_UP || 
     key == event.PAGE_DOWN || 
     key == event.HOME || 
     key == event.END)) { 

     console.log('unsuccessfully trying to stop the event!'); 
     event.stopEvent(); 
     event.stopPropagation(); 
     event.shiftKey = false; 
     return false; 
    } 
}); 

編輯:

我不想enableKeyNav: false禁用所有鍵盤導航我只是不想一起多選鍵盤。

回答

2

您可以使用:

selModel: { 
    enableKeyNav: false 
}, 

網格配置。 但它是意想不到的選擇模型的行爲對我來說...

更新

作爲一個非常簡單的版本:

selModel: { 
    selectRange: function() { 
     return false; 
    } 
}, 
+0

我本來應該在問題更加清晰。我確實希望能夠用鍵盤導航(只是沒有多個鍵盤選擇) – Geronimo

+0

@Geronimo我更新了我的答案。 – Vlad

+0

天才!謝謝。 – Geronimo