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

#javascript #extjs #combobox #selectedindex

#javascript #extjs #выпадающий список #selectedindex

Вопрос:

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

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

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

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

Ответ №1:

Я думаю, вам придется использовать для этого хранилище списка. У Combo есть частный 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() представления, но я сомневаюсь, что это хорошее решение (поскольку я не уверен, что оно доступно постоянно)

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

 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:

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

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

Ответ №3:

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