ExtJs no activó el evento de selección en ComboBox
extjs4 (2)
Encontré esto porque estaba usando incorrectamente valueField
en combobox ... No estoy seguro de lo que se supone que debe hacer, pero si lo tiene configurado incorrectamente, rompe el combobox, evita que el evento de change
se dispare y detiene el select
evento de disparar más de una vez.
Supongo que es así que puede tener varios objetos en la lista que representan el mismo elemento y valueField representa la clave, así que si la configura incorrectamente, entonces la clave no está definida para todo y, por lo tanto, es la misma para todo. Lo que no significa nada después de que el primer conjunto cuente como un nuevo valor.
Parece un buen comportamiento de nicho (y no lo que quería), así que lo eliminé en mi caso y las cosas empezaron a funcionar.
También creo que el evento que desea es el evento de change
, dice la documentación (para 4.1)
Fires when the value of a field is changed via the setValue method.
mientras que select
solo dispara cuando alguien hace clic en el cuadro combinado
Solo un poco aparte, pero también me cuestionaría usar un evento para esto: sabes que has llamado setValue, así que, ¿por qué no haces lo que quieres que suceda después de que llames valor establecido? Los eventos tienden a hacer que el código sea más confuso y, si no necesita multidifusión, normalmente es mejor no molestarse con ellos.
Tengo un problema con el combobox
ExtJs, considero que tengo un combobox
que tiene 4 elementos y una función de devolución de llamada en el evento select
en combobox
.
Cuando voy a configurar el valor seleccionado del combobox
con setValue()
, los ExtJs no activan el evento de select
.
¿Como puedo solucionar este problema?
¿Debo disparar este evento después de setValue()
por mí mismo?
Puedo decirles lo que el soporte de sencha dijo para eso hace un año:
Bueno, el evento es, por definición, una llamada a la función activada por una acción del usuario y no hay acción del usuario cuando se llama a la selección.
De todos modos, el "arreglo" es fácil: usted sabe que llama a select, por lo que justo después de seleccionar select puede llamar a su función de escucha de selección.
Depende de tu caso lo que debas hacer. En mi caso, colgué mi implementación para poder llamar al método responsable, pero, por otro lado, no veo ningún inconveniente cuando tú disparas el evento. Así que creo que depende de ti el enfoque que más te guste.
Aquí hay un ejemplo de cómo puedes @JohanHaest el evento por ti mismo (en parte del comentario de @JohanHaest )
Para hacerlo simple, digo que solo tiene habilitada la selección única
var record = combo.store.getById(id);
combo.select(id);
combo.fireEvent(''select'', combo, record);
o
combo.select(model);
combo.fireEvent(''select'', combo, model);
Hay un posible Hack en la versión actual (4.1.3) al establecer un segundo argumento en el método de select
en true
. Esto, según el código fuente, activará el evento seleccionado. Pero el primer argumento tiene que ser una instancia modelo.
// source-snipped
select: function(r, /* private */ assert)
Entonces llamando
combo.select(model, true);
activará el evento de selección, pero este comportamiento puede cambiar en cualquier momento (versión) porque la afirmación está marcada como privada