Как я могу получить выбранный индекс ExtJS Combobox - PullRequest
20 голосов
/ 16 мая 2011

Каков сертифицированный способ определения индекса выбранного в данный момент элемента в 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 ]

36 голосов
/ 16 мая 2011

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

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

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

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

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

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

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));
  }
});
4 голосов
/ 14 июля 2011

В 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));
  }
});

Джэд, вам не хватает закрывающей скобки в операторе возврата ... просто подумал, что вы должны знать.

2 голосов
/ 17 апреля 2012

Если у вас есть комбо, где 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);
...