2013-02-01 2 views
3

Я хочу одну сетку выбора, сначала я не включал конфигурацию модели выбора, потому что это the default. Это отлично подходит для выбора мыши, но если я нахожу SHIFT + END, он выбирает все записи (или PAGE UP, HOME или END оказывает аналогичный эффект).предотвратить клавиатуру multiselect для gridpanels

Выбранные записи невозможно отменить выбор без перезагрузки сетки (если только я не хотел, чтобы сетка была сконфигурирована с allowDeselect: true, которой я не занимаюсь).

Думая, что это проблема с документами ExtJS по умолчанию, я затем сконфигурировал сетку с SINGLE явно, но все еще имел проблему.

Я проверил некоторые из их примера сетки here, и все они имеют те же проблемы - любой одиночный выбор сетки предотвратит мыши Групповое, но может быть multiselected с помощью клавиши переключения и HOME, END, PAGE UP или PAGE DOWN. И тогда невозможно, чтобы отменить выбор записей.

Кажется, это ошибка в каркасе, и я отправлю отчет, но поскольку сетки являются одним из наиболее часто используемых компонентов, я предположил, что у кого-то есть обходной путь для этого.

В отчаянии я также пробовал слушать 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; 
    } 
}); 

EDIT:

Я не хочу, чтобы отключить все клавиатуры навигации с enableKeyNav: false Я просто не хочу, чтобы MULTISELECT с клавиатура.

ответ

2

Вы можете использовать:

selModel: { 
    enableKeyNav: false 
}, 

в сетке конфигурации. Но это было неожиданное поведение модели выбора для меня ...

Update

Как очень простой вариант:

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

Я должен был быть более четким в этом вопросе. Я хочу, чтобы иметь возможность навигации с помощью клавиатуры (просто не с несколькими выборами с клавиатуры) – Geronimo

+0

@Geronimo Я обновляю свой ответ. – Vlad

+0

Гений! Спасибо. – Geronimo

Смежные вопросы