2012-07-19 7 views

Respuesta

19

En general, se puede utilizar el método findRecordByValue en el cuadro combinado:

combobox.on('change', function(combobox, newValue, oldValue) { 

    // Get the old and the new records. 
    // NOTE: The underlying store is not guaranteed to 
    //  contain an associated record. 
    var oldRecord = combobox.findRecordByValue(oldValue); 
    if (oldRecord) { 
     // Do something... 
    } 

    var newRecord = combobox.findRecordByValue(newValue); 
    if (newRecord) { 
     // Do something... 
    } 
}); 
+0

Interesante. Soy bastante nuevo en extJS, ¿cuál es la mejor práctica aquí? –

+1

Buena pregunta. A riesgo de sonar cliché, depende de tu caso de uso. Creo que hay 2 cosas clave a tener en cuenta. Primero, el evento 'select' es un evento UI, mientras que el evento' change' es un evento de cambio de estado. En segundo lugar, un cuadro combinado * utiliza * su tienda para facilitar el cambio de su valor de campo subyacente a través de la interfaz de usuario. Como resultado, el evento 'select' * siempre * corresponde a un registro en la tienda subyacente, pero el evento' change' no. –

+0

Hmm Honestamente, no sé qué respuesta marcar como correcta, porque, como señaló, la respuesta correcta depende del caso de uso. –

6

Lo descubrí casi inmediatamente después de publicar mi pregunta.

Mi problema era que era vinculante para el evento incorrecto, estaba usando 'cambio' en lugar de 'selección'.

El evento de selección le da el registro con el objeto completo que contiene.

+5

Tenga en cuenta que el evento 'select' sólo se activa si el valor cambia porque el usuario hace clic en una opción en la lista. Si 'setValue' se llama programáticamente, solo' change' se disparará. –

Cuestiones relacionadas