web-dev-qa-db-ja.com

ExtJSコンボボックスの選択されたインデックスを取得する方法

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オブジェクトに追加する方法のボーナスポイント。

20
Seb Nilsson

そのためにはコンボのストアを使用する必要があると思います。コンボには、プロパティと値でストアを簡単に検索するプライベート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));
  }
});
36
Jad

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ステートメントに閉じ括弧がありません...あなたが知っておくべきだと思っただけです。

4
SerEnder

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