如何获取ExtJS Combobox的选定索引?

20

在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个回答

37

我认为你需要使用组合框(combo)的store。组合框有一个私有的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));
  }
});

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,在你的return语句中缺少一个右括号,只是想让你知道。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接