ExtJS 4 CheckboxModel как разрешить отмену выбора при использовании режима MULTI - PullRequest
1 голос
/ 21 октября 2011

Мы используем checkboxmodel в нашем приложении, которое требует, чтобы мы позволили выбрать несколько элементов в нашей сетке.Поэтому мы должны установить mode: 'MULTI' в нашей модели флажков.

Поведение по умолчанию требует, чтобы пользователь удерживал CTRL и щелкнул элемент, чтобы отменить его выбор при использовании этой конфигурации.Я хотел бы переопределить поведение по умолчанию, чтобы позволить пользователям отменить выбор элемента в списке, щелкнув по нему второй раз.конфигурацию allowDeselect для checkboxModel можно использовать только в том случае, если для режима задано значение SINGLE, и снова мы используем MULTI.

Любые предложения по отмене этого поведения в ExtJS 4 приветствуются!

Ответы [ 3 ]

5 голосов
/ 22 октября 2011

Вы имели в виду mode: 'SIMPLE'?

mode : String
Режим выбора. Допустимые значения:

  • SINGLE - позволяет выбирать только один элемент за раз. Используйте allowDeselect, чтобы разрешить отмену выбора этого элемента. Это значение по умолчанию.
  • SIMPLE - позволяет простой выбор нескольких элементов по одному. Каждый щелчок в сетке будет выбирать или отменять выбор элемента.
  • МУЛЬТИ - Позволяет сложный выбор нескольких элементов с помощью клавиш Ctrl и Shift.

Попробуйте: ДЕМО

Должен работать фрорм 3+. Я не думаю, что эта конфигурация является новой.

1 голос
/ 24 июля 2013

Попробуйте это:

// Allow deselecting the only selected record in MULTI mode with a simple click.
// Note that this will only happen when allowdeselect is true
Ext.override( Ext.selection.Model, {
    selectWithEvent: function(record, e, keepExisting) {
        var me = this;

        switch (me.selectionMode) {
            case 'MULTI':
                if (e.ctrlKey && me.isSelected(record)) {
                    me.doDeselect(record, false);
                } else if (e.shiftKey && me.lastFocused) {
                    me.selectRange(me.lastFocused, record, e.ctrlKey);
                } else if (e.ctrlKey) {
                    me.doSelect(record, true, false);
                // Mod Start
                } else if (me.isSelected(record) && !e.shiftKey && !e.ctrlKey && me.selected.getCount() == 1 && me.allowDeselect) {
                    me.doDeselect(record, false);                    
                // Mod End                        
                } else if (me.isSelected(record) && !e.shiftKey && !e.ctrlKey && me.selected.getCount() > 1) {
                    me.doSelect(record, keepExisting, false);
                } else {
                    me.doSelect(record, false);
                }
                break;
            case 'SIMPLE':
                if (me.isSelected(record)) {
                    me.doDeselect(record);
                } else {
                    me.doSelect(record, true);
                }
                break;
            case 'SINGLE':
                // if allowDeselect is on and this record isSelected, deselect it
                if (me.allowDeselect && me.isSelected(record)) {
                    me.doDeselect(record);
                // select the record and do NOT maintain existing selections
                } else {
                    me.doSelect(record, false);
                }
                break;
        }
    },
});
0 голосов
/ 31 июля 2012

В ExtJS 4, если требуется выбор клавиши Shift, тогда переопределить 'onRowSelection; метод и изменение условия для множественного выбора "if (mode! == 'SINGLE' && mode! == 'MULTI')"

...