2013-02-01 1 views
3

하나의 선택 그리드가 필요합니다. 처음에는 선택 모델 구성이 포함되어 있지 않았으므로, the default입니다. 이 작업은 마우스 선택에 문제가 없지만 키를 SHIFT + END으로 설정하면 모든 레코드가 선택됩니다 (또는 PAGE UP, HOME 또는 END과 비슷한 효과가 있음).키보드 멀티 셀렉트 방지 (격자 패널 용)

allowDeselect: true으로 구성된 그리드를 원하지 않는 한, 선택한 레코드를 그리드를 다시로드하지 않고는 선택을 해제 할 수 없습니다.

이것이 ExtJS 문서에서 기본값에 관한 문제 였다고 생각하여 SINGLE으로 그리드 패널을 명시 적으로 선택했지만 문제가 계속 발생했습니다.

나는 그 예를 몇 가지 그리드 here를 체크 아웃, 그들은 모두 같은 문제가 있습니다 - 단일 선택 그리드 마우스 다중 선택을 방지 할 수 있지만, Shift 키와 HOME, END, PAGE UP 또는 PAGE 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

Genius! 고맙습니다. – Geronimo