Как получить индекс выбранного Ext.форма.поле.Элемент PickerView?

Как получить индекс выбранного Ext.форма.поле.Элемент PickerView?
Я пытаюсь использовать его:

Ext.define('Bind.CL.FormD.view.MyCombo', {
    extend: 'Ext.form.field.Picker',
alias: 'widget.mycombo',

...something code...

this.on('expand', function () {
            var combo = Ext.ComponentQuery.query('mycombo')[0];
            var value = combo.getValue(); //or getRawValue();
        }, this);

Но это не работает..

2 ответа

  1. Можно использовать функцию indexOf ():
    Пожалуйста, проверьте Fiddle : https://fiddle.sencha.com/#fiddle/1i0o

    Ext.application({
    name: 'Fiddle',
    
    launch: function() {
        simpsonsStore = Ext.create('Ext.data.Store', {
        storeId : 'simpsonsStore',
        fields : ['id','name', 'email'],
        data : [
            {name : 'Lisa',email : 'lisa@simpsons.com',id:1}, 
            {name : 'Bart', email : 'bart@simpsons.com',id:2}, 
            {name : 'Homer', email : 'homer@simpsons.com',id:3},
            {name : 'Marge',email : 'marge@simpsons.com',id:4}
        ]
    });
    
         Ext.create('Ext.form.field.ComboBox', {
            emptyText: "Hello",
            growMax: 10,
            valueField: 'id',
            store:simpsonsStore,
            displayField: 'name',
            editable: false,
            queryMode: 'local',
            renderTo: Ext.getBody(),
            listeners:{
                 change:function(combo){
                     console.log(combo.store.indexOf((combo.store.getById(combo.value))));
                 }
             }
        });
    }
    });
    
  2. Мое решение:

    this.on('expand', function () {
            var combo = Ext.ComponentQuery.query('mycombo')[0],
                value = combo.getValue(),
                root = value.store.tree.getRootNode(),
                record = root.childNodes,
                currentValue = combo.getValue().data.Code,
                index = 0;
    
        Ext.each(record, function(element) {
            var data = element.getData();
    
            if (data.Code === currentValue) {
                return false;
            }
    
            index++;     
        });