2016-06-13 11 views
0

Ich habe folgende Tagfield Erklärung:ExtJS 6.0.1 Tagfield nicht erfasste Fehler mit multiselect: false

{ 
    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' 
     }] 
    }) 
    } 

Wenn ich versuche, Tagfield den Wert auf eine Combobox zu setzen, würde ich dies erwarten zu arbeiten, aber ich bekomme die folgende Fehler in der Konsole.

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

Was mache ich falsch?

Danke für Ihre Hilfe!

+0

Ein Tag-Feld benötigt Tags, und es ist nicht sinnvoll, nur eines davon auszuwählen. Ich schätze, du könntest den Fehler im offiziellen Sencha-Forum melden, und Sencha würde den Fehler "reparieren", indem er während der Instantiierung einen weiteren Fehler ("multiSelect: false ist nicht erlaubt in tagfield") auslöst. Schließlich wird "multiSelect" von "combobox" übernommen. – Alexander

Antwort

0

Wir hatten ähnliches Problem. (Wir arbeiten jedoch mit ExtJs 5)

Wir benötigten Combo mit Freitext-Eingabe, die nur einen Wert gleichzeitig auswählen/eingeben lässt. Also nahmen wir TagField und setzten multiSelect auf false. Es begann sich merkwürdig zu verhalten und die Möglichkeit der freien Texteingabe ist weg.

Die Lösung, dass ich glaube, das Problem der ursprünglichen Frage lösen:

  1. Rückkehr multiSelecttrue wieder
  2. hinzufügen Zuhörer change Ereignis zu sein, und ändern Sie den Wert der zuletzt durch den Benutzer ausgewählt werden

Mit Codeb. aus Frage:

{ 
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); 
     } 
    } 
}, 

... 
} 

Der oldValue ist ein Array, das nur ein Element enthält (vorheriger Wert). Der newValue ist ein Array, das zwei Elemente enthält: Vorheriger Wert und neuer ausgewählter Wert.

Verwandte Themen