2016-06-13 85 views
0

我有以下tagfield声明:ExtJS的6.0.1 TagField未捕获的错误与多选:假

{ 
    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设为multiSelectfalse。 它开始表现怪异,自由文本输入的可能性已经消失。

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

  1. 回报multiSelecttrue再次
  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是一个包含两个元素的数组:前一个值和新的选定值。