javascript extjs combobox selectedindex

javascript - ¿Cómo obtengo el índice seleccionado de un Combobox ExtJS?



selectedindex (3)

Creo que tendrás que usar la tienda de combo para eso. Los combos tienen un método privado findRecord que hará una búsqueda simple en la tienda por propiedad y valor. Puede ver un ejemplo en el propio código fuente (Combo.js línea 1119).

1) En función de esto, puede encontrar el índice seleccionado de esta manera:

var v = combobox.getValue(); var record = combobox.findRecord(combobox.valueField || combobox.displayField, v); var index = combobox.store.indexOf(record);

2) O podría vincularse al evento "select" que se activa con el combo, el registro seleccionado y su índice como parámetro.

3) También puede acceder a la vista getSelectedIndexes () pero dudo que sea una buena solución (porque no estoy seguro de que esté disponible todo el tiempo)

Finalmente, si quieres extender el objeto combobox, creo que esto debería funcionar (si vas con la primera solución):

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

¿Cuál es la forma certificada de determinar el índice del elemento seleccionado actualmente en un ComboBox en ExtJS?

¿Hay alguna diferencia en cómo hacer esto entre ExtJS 3.xy 4?

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

Puntos de bonificación por cómo agregarlo como una propiedad al objeto ComboBox.


En Ext 4.0.2 el mismo código se vería así:

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, te falta un paréntesis de cierre en tu declaración de devolución ... solo pensé que deberías saberlo.


Si tiene un combo donde valueField es el ID utilizado por la tienda del combo, simplemente puede evitar la búsqueda:

var v = combobox.getValue(); var record = combobox.findRecord(combobox.valueField || combobox.displayField, v); var index = combobox.store.indexOf(record);

usando esto:

var id = combobox.getValue(); var record = store_combobox.getById(id);