Как получить выбранный индекс ExtJS Combobox

каков сертифицированный способ определения индекса текущего выбранного элемента в ComboBox в ExtJS?

есть ли разница в том, как это сделать между ExtJS 3.x и 4?

var combo = new Ext.form.ComboBox(config);
var selectedIndex = combo.selectedIndex; // TODO: Implement
if(selectedIndex > 2) {
    // Do something
}

бонусные баллы за то, как добавить его в качестве свойства в ComboBox-объект.

3 ответов


Я думаю, вам придется использовать магазин комбо для этого. Комбо имеют частный findRecord метод, который будет выполнять простой поиск по магазину по свойству и значению. Вы можете увидеть пример в самом исходном коде (Combo.строки в JS-1119).

1) на основе этого вы можете найти выбранный индекс таким образом :

var v = combobox.getValue();
var record = combobox.findRecord(combobox.valueField || combobox.displayField, v);
var index = combobox.store.indexOf(record);

2) или вы можете привязать себя к событию "select", которое запускается с помощью комбо, выбранной записи и ее индекса в качестве параметра.

3) Вы также можете получить доступ к getSelectedIndexes представления (), но я сомневаюсь, что это хорошее решение (в том, что я не уверен, что оно доступно все время)

наконец, если вы хотите расширить объект combobox, я думаю, что это должно работать (если вы идете с первым решением):

Ext.override(Ext.form.ComboBox({
  getSelectedIndex: function() {
    var v = this.getValue();
    var r = this.findRecord(this.valueField || this.displayField, v);
    return(this.store.indexOf(r));
  }
});

в Ext 4.0.2 тот же код будет выглядеть так:

Ext.override(Ext.form.ComboBox, {
  getSelectedIndex: function() {
    var v = this.getValue();
    var r = this.findRecord(this.valueField || this.displayField, v);
    return(this.store.indexOf(r));
  }
});

Jad, у вас отсутствует закрывающая скобка в операторе return... просто подумал, что ты должен знать.


Если у вас есть комбо, где valueField-идентификатор, используемый магазином комбо, вы можете просто избежать поиска:

var v = combobox.getValue();
var record = combobox.findRecord(combobox.valueField || combobox.displayField, v);
var index = combobox.store.indexOf(record);

С помощью этого:

var id = combobox.getValue();
var record = store_combobox.getById(id);