Как получить выбранный индекс 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.
Ответы
Ответ 1
Думаю, вам придется использовать для этого комбо-магазин. У Combos есть частный метод 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));
}
});
Ответ 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));
}
});
Jad, вам не хватает закрывающей круглой скобки в вашем заявлении 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);