如何获取ExtJS Combobox的选定索引

时间:2011-05-16 08:04:46

标签: javascript extjs combobox selectedindex

在ExtJS中确定ComboBox中当前所选项目的索引的认证方式是什么?

在ExtJS 3.x和4之间如何做到这一点有什么不同?

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

如何将其作为属性添加到ComboBox对象的加分点。

3 个答案:

答案 0 :(得分:36)

我认为你必须使用combo的商店。 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(),但我怀疑它是一个很好的解决方案(因为我不确定它是否始终可用)

最后,如果你想扩展组合框对象,我认为这应该有效(如果你选择第一个解决方案):

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

答案 1 :(得分:4)

在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,你在退货声明中错过了一个右括号......只是觉得你应该知道。

答案 2 :(得分:2)

如果你有一个组合,其中valueField是组合商店使用的id,你可以简单地避免搜索:

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