2016-10-28 3 views
1

Как добавить функцию мультиплекса shift plus в extjs combobox?Как добавить функцию multiselect shift + click в extjs combobox

+0

Вы можете установить 'MultiSelect: true', если вы используете более старую версию (до 5.1). Для более новых версий вы можете использовать _tagfield_ или _multiselector_. – chrisuae

+0

Спасибо chrisuae за ваш ответ. Но мне нужно, чтобы при выборе элемента в поле со списком и нажатии клавиши shift и выборе другого элемента нужно было выбрать все элементы между этими двумя выборами. Мне нужно это в выпадающем списке для старой версии – Gaurav

ответ

0

Это будет работать для ExtJS 5.1.3/6.0.2/6.2.0
Fiddle: https://fiddle.sencha.com/#fiddle/1jhv

Ext.define('Combo',{ 
    override: 'Ext.form.field.ComboBox', 
    onBindStore: function(store, initial) { 
     var me = this, 
      picker = me.picker, 
      extraKeySpec, 
      valueCollectionConfig; 

     if (store) { 
      if (store.autoCreated) { 
       me.queryMode = 'local'; 
       me.valueField = me.displayField = 'field1'; 
       if (!store.expanded) { 
        me.displayField = 'field2'; 
       } 

       if (me.getDisplayTpl().auto) { 
        me.setDisplayTpl(null); 
       } 
      } 
      if (!Ext.isDefined(me.valueField)) { 
       me.valueField = me.displayField; 
      } 

      extraKeySpec = { 
       byValue: { 
        rootProperty: 'data', 
        unique: false 
       } 
      }; 
      extraKeySpec.byValue.property = me.valueField; 
      store.setExtraKeys(extraKeySpec); 

      if (me.displayField === me.valueField) { 
       store.byText = store.byValue; 
      } else { 
       extraKeySpec.byText = { 
        rootProperty: 'data', 
        unique: false 
       }; 
       extraKeySpec.byText.property = me.displayField; 
       store.setExtraKeys(extraKeySpec); 
      } 

      valueCollectionConfig = { 
       rootProperty: 'data', 
       extraKeys: { 
        byInternalId: { 
         property: 'internalId' 
        }, 
        byValue: { 
         property: me.valueField, 
         rootProperty: 'data' 
        } 
       }, 
       listeners: { 
        beginupdate: me.onValueCollectionBeginUpdate, 
        endupdate: me.onValueCollectionEndUpdate, 
        scope: me 
       } 
      }; 


      me.valueCollection = new Ext.util.Collection(valueCollectionConfig); 

      me.pickerSelectionModel = new Ext.selection.DataViewModel({ 
       mode: me.multiSelect ? me.enableShiftSelect ? 'MULTI' : 'SIMPLE' : 'SINGLE', 
       ordered: true, 
       deselectOnContainerClick: false, 
       enableInitialSelection: false, 
       pruneRemoved: false, 
       selected: me.valueCollection, 
       store: store, 
       listeners: { 
        scope: me, 
        lastselectedchanged: me.updateBindSelection 
       } 
      }); 

      if (!initial) { 
       me.resetToDefault(); 
      } 

      if (picker) { 
       me.pickerSelectionModel.on({ 
        scope: me, 
        beforeselect: me.onBeforeSelect, 
        beforedeselect: me.onBeforeDeselect 
       }); 

       picker.setSelectionModel(me.pickerSelectionModel); 

       if (picker.getStore() !== store) { 
        picker.bindStore(store); 
       } 
      } 
     } 
    } 
}); 

Затем создать выпадающий с enableShiftSelect: true и multiSelect: true.

// The data store containing the list of states 
var states = Ext.create('Ext.data.Store', { 
    fields: ['abbr', 'name'], 
    data : [ 
     {"abbr":"AL", "name":"Alabama"}, 
     {"abbr":"AK", "name":"Alaska"}, 
     {"abbr":"AZ", "name":"Arizona"} 
    ] 
}); 

// Create the combo box, attached to the states data store 
Ext.create('Ext.form.ComboBox', { 
    fieldLabel: 'Choose State', 
    store: states, 
    queryMode: 'local', 
    displayField: 'name', 
    valueField: 'abbr', 
    enableShiftSelect: true, 
    multiSelect: true, 
    renderTo: Ext.getBody() 
}); 
+0

Спасибо Guilherme, он работает. – Gaurav

+0

Awesome ... какая версия ExtJS вы используете? –

+0

Я пробовал в версии 6.0.1 – Gaurav

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