ExtJS 5 multiSelect tag / combobox: позволяет выбрать один и тот же элемент несколько раз - PullRequest
0 голосов
/ 29 августа 2018

Мне недавно пришлось создать поле for, которое позволяет мне выбирать элементы в выпадающем списке. Прямо сейчас выпадающий список автоматически отменяет выбор элемента, если он уже выбран. Тем не менее, я хочу иметь возможность выбирать элемент столько раз, сколько захочу. Я видел, как это работало в предыдущих версиях, но я думаю, что это было скорее ошибкой. Использование последней версии ext js 5.

Я попытался расширить обычный выпадающий список и расширить выбор моделей. Методы «onNavigate» или «onSelectChange» в initComponent, но любой журнал внутри этого не работает.

Ext.define('MyApp.MultiSelect', {
  extend: 'Ext.form.field.Tag',
  alias: 'widget.field-multiselect',
  selectOnFocus: false,
  delimiter: '->',
  editable: false,
  renderField: 'name',
  displayField: 'name',
  valueField: 'id',
  multiSelect: true,
  allowDeselect: false,
  listConfig: {
    getInnerTpl: function () {
        return [
            '<tpl>' +
            '<span>{name:htmlEncode}</span>' +
            '</tpl>'
        ];

    }
  },
  initComponent: function () {
    var me = this;
    this.callParent(arguments);

    me.selectionModel = new Ext.selection.Model({
        mode: 'MULTI',
        onNavigate: function(e) {
            console.log('nothing here');
        },
        onSelectChange: function(record, isSelected, suppressEvent, 
         commitFn) {
            // This only triggers when I click a tag, not when I click 
            // the boundlist
            console.trace('nothing here');

        }
    me.selectionModel.bindStore(me.valueStore, true);
    if (me.multiSelect && !Ext.isEmpty(me.delimiter)) {
        me.delimiterEndingRegexp = new RegExp(String(me.delimiter).replace(/[$%()*+.?\[\\\]{|}]/g, "\\$&") + "$");
    }

Я также пытался создать собственную модель выбора, но она также не работала для связанного списка.

Теперь, как я могу заархивировать назначение нескольких тегов вместо того, чтобы отменить выбор? Кроме того, allowDeselect, похоже, ничего не делает.

E: Я заметил, что модель выбора не для ограниченного списка, поэтому мне пришлось изменить selectionModel в функции onBindStore. Тем не менее, все еще кажется сложным позволить этой модели принимать несколько значений.

...