Extjs 6.0.1 TagField Uncaught错误与multiSelect:false

时间:2016-06-13 03:05:27

标签: forms extjs combobox

我有以下标记字段声明:

  {
    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():无法将值添加到非   multiSelect ComboBox未捕获错误:无法向非添加值   multiSelect ComboBox

我做错了什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我们遇到过类似的问题。 (我们使用ExtJs 5)

我们需要组合自由文本输入,一次只能选择/输入一个值。因此,我们使用TagField并将multiSelect设置为false。 它开始表现得很奇怪,自由文本输入的可能性已经消失。

我认为,解决方案将解决原始问题的问题:

  1. 再次multiSelect返回true
  2. 将监听器添加到change事件并将值更改为用户
  3. 最后选择的值

    使用问题中的代码示例:

    {
    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是一个包含两个元素的数组:previous值和new selected value。