2016-06-13 3 views
0

У меня есть следующее tagfield заявление:Extjs 6.0.1 TagField Uncaught Ошибка с MULTISELECT: ложная

{ 
    xtype: 'tagfield', 
    fieldLabel: 'Sex', 
    labelAlign: 'right', 
    name: 'sex', 
    multiSelect: false, 
    queryMode: 'local', 
    displayField: 'sexName', 
    valueField: 'sex', 
    allowBlank: false, 
    flex: 1, 
    editable: true, 
    growMax: 45, 
    store: Ext.create('Ext.data.Store', { 
     autoLoad: true, 
     fields: ['sexName', 'sex'], 
     data: [{ 
      sexName: 'mail', 
      sex: 'mail' 
     },{ 
      sexName: 'femail', 
      sex: 'femail' 
     }] 
    }) 
    } 

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

[E] Ext.form.field.ComboBox.doSetValue(): Cannot add values to non multiSelect ComboBox Uncaught Error: Cannot add values to non multiSelect ComboBox

Что я делаю неправильно?

Благодарим за помощь!

+0

В поле тега есть теги, и нет смысла разрешать только один из них. Я думаю, вы могли сообщить об ошибке на официальном форуме sencha, и Sencha «исправил» ошибку, выбросив еще одну ошибку («multiSelect: false не разрешен в tagfield») раньше, во время создания экземпляра. В конце концов, 'multiSelect' наследуется от' combobox'. – Alexander

ответ

0

У нас была схожая проблема. (Мы работаем с ExtJs 5, хотя)

Нам нужна комбинация со свободным вводом текста, которая позволяет одновременно выбирать или вводить только одно значение. Итак, мы взяли TagField и установили multiSelect в false. Это начало вести себя странно, и возможность свободного ввода текста ушла.

решения, что я считаю, будет решить проблему первоначального вопроса:

  1. возвращения multiSelect быть true снова
  2. добавить слушатель change события и изменить значение будет последним выбранным пользователем

Используя пример кода от вопроса:

{ 
xtype: 'tagfield', 
fieldLabel: 'Sex', 
labelAlign: 'right', 
name: 'sex', 
multiSelect: true, 
queryMode: 'local', 
displayField: 'sexName', 
valueField: 'sex', 
allowBlank: false, 
flex: 1, 
editable: true, 
growMax: 45, 
listeners: {   
    change: function (field, newValue ,oldValue ,eOpts) {   
      newValue = newValue.filter(function(el) { 
       return el !== oldValue[0]; 
      }); 
      this.setValue(newValue); 
     } 
    } 
}, 

... 
} 

OldValue - это массив, содержащий только один элемент (предыдущее значение). NewValue - это массив, содержащий два элемента: предыдущее значение и новое выбранное значение.

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