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

そのためにはコンボストアを使わなければならないと思います。コンボには、プロパティと値でストアを簡単に検索するプライベート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));
  }
});
于 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));
  }
});

ジェイド、returnステートメントの閉じ括弧がありません...知っておくべきだと思っただけです。

于 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 に答える