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 对象的奖励积分。

4

3 回答 3

37

我认为您必须为此使用组合商店。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)或者您可以将自己绑定到使用组合触发的“选择”事件,选择的记录及其索引作为参数。

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));
  }
});
于 2011-05-16T09:05:37.977 回答
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,你的退货声明中缺少一个右括号……只是认为你应该知道。

于 2011-07-13T20:17:29.913 回答
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);
于 2012-04-17T09:39:01.463 回答