Quizá soy yo no he sido capaz de encontrar la solución correcta pero me parece que una cosa tan simple como tener una opción seleccionada por defecto en un desplegable, no debería ser una tarea tan y tan complicada.
Aquí tenéis el código para poder tener una opción seleccionada por defecto en un desplegable con EXTJS
{
xtype : 'combo',
fieldLabel : 'Sexo',
hiddenName : 'sexo',
name : 'sexo',
mode : 'local',
width : 250,
displayField : 'name',
valueField : 'id',
store : new Ext.data.SimpleStore({
id : 0 ,
fields : [ 'id', 'name' ],
data : [
[1, 'Hombre'],
[2, 'Mujer']
]
}),
listeners : {
beforerender: function(combo){
combo.setValue(1);// El ID de la opción por defecto
}
},
},
Si bien es cierto que podemos ponerle un valor por defecto con la propiedad value, Nos pone como valor el nombre es decir ‘Hombre’ o ‘Mujer’ y no el ID ’1′ o ’2′.
Lo ‘único‘ que hay que hacer entonces es utilizar la propiedad ‘hiddenName‘ y poner en el listener ‘beforerender‘, que se ejecuta una vez se ha cargado el store, una función que nos cargue como valor el ID que queramos.
Me ha costado encontrar como hacerlo, espero que no perdáis tanto rato como yo, si tenéis dudas preguntad
Normalmente lo único que hago es poner esto “combo.setValue(1)” en el evento “show” o en el evento “load” del store, dependiendo de la aplicación que esté haciendo.
saludos
yo normalmente pongo emptyText: ‘-’
Oye a ver si podiais echarme una mano, como va el tema de la licencia del extJS? hay q hacer algo especial o con q no tenga animo de lucro vale? es q no tengo ni idea de como van esas cosas
Bueno creo que si estas haciendo una aplicación open source, y liberas el código no tienes que hacer nada especial, sin embargo si quieres hacer una aplicación para venderla entonces creo que necesitas la licencia….
Hola Adrià,
estoy haciendo una aplicación con ExtJs y tengo este problema, no logro dejar una opción por defecto, esto lo debo hacer para una pantalla de edición de datos anteriormente ingresados…
existe la posibilidad de que postees un ejemplo mas completo, dado que he intentado todo lo que señalaste, pero lo unico que siempre consigo es que se escriba el valor del ID visualmente en el combo y no que quede seleccionado el item con ese ID.
gracias por adelantado y saludos desde Chile
Hola de nuevo, finalmente logré hacer esto, gracias a la respuesta de Crysfel, tuve que crear un listener para el evento load del store del combobox, y ahí cambiar el valor…
por alguna razón si el setValue no estaba en este listener, solo agregaba el valor a la lista que se desplegaba. Creo que esto se debe a que el store estaba aún cargandose, por lo que o no podía acceder a él o no encontraba el valor, por lo que simplemente lo escribía.
bueno, lo hago saber para algún otro que esté empezando en esto de extjs como yo.
Perdona que no haya podido responder antes, la verdad es que me pasé bastante tiempo intentando hacer funcionar el combobox a mi gusto, y cuanta más info aportemos entre todos a este tema en la red mejor….
Por cierto visita el sitio de Crysfel porqué está genial, muy bien organizado y fácil para empezar con ExtJS.
Un Saludo
Hola!
De verdad, este asunto es un dolor de cabeza. El código publicado, funciona de perillas. La única corrección que yo le hice fue ponerle triggerAction: ‘all’ osino, solo despliega la opción elegida… con eso las muestra todas.
Pero mi problema va por otro lado, cuando la fuente de datos no es local sino ‘remote’, no funciona. No hay caso, he probado mil y una alternativa y siempre dice q no encuentra la opción. Supongo que tiene que ver con que los datos se cargan al hacer click en en la flechita (el gatillador). ¿Alguna idea?? ¿alguien lo resolvió?
Saludos
Buenas Victoria,
supongo que tendrías que encontrar el listener que se lance después de cargar tus datos, y poner en el la siguiente instrucción:
combo.setValue(1);// El ID de la opción por defecto
No se que listener puede ser, quizá el click, aunque es probable que no, ya que al hacer click todavía no hay datos, habría que buscar uno que saltara después de la carga de datos. Ya nos contarás.
Si, ya lo pillé.
Les cuento, el asunto es q al poner mode: ‘remote’, los datos del combo recién se cargan cuando uno hace click en el gatillador, por lo tanto es imposible que encuentre el valor que se pone en el setValue.
La solución es poner mode: ‘local’ y forzar la carga de datos al mostrar el formulario. Así al setear el valor inicial con setValue, ya hay una lista contra la cual comparar.
Después de varios dias de sufrimiento, lo resolví, muchas gracias, tu ejemplo me sirvió muchísimo.
Saludos,
Gracias por compartir la info.
Necesito ayuda urgente, soy nuevo en esto, no tengo el minimo de conocimientos necesarios, pero tengo k hacer un trabajo obligatorio, y me gusta hacer las cosas, asi k espero k me podais ayudar..
Necesito hacer k un combobox (que cargo desde una base de datos) me muestre unos valores , pero k me envie otros, es decir, k me muestre el nombre, pero me envie el id del nombre, entendeis de k va?
He tratado con valueField , HiddenName , pero no me trabaja correctamente, no se si es k estoy haciendo algo mal o ni idea , pero es k soy muy malo con los tutoriales, y como no domino bien el ingles..Porfa tirenme una ayuda..
hola soy novato en EXTjs, quisiera saber como hacer para que el formulario al momento de grabar me valide el combo, Que alla seleccionado una opcion.
Hola, soy nuevo en la EXT y justamente estoy buscando algo relacionado con este post, espero que me ayude.
Para Luis, creo que hay un parametro llamado “forceSelection”, si le pones valor true creo que te puede funcionar.
Espero te sirva, saludos!