2012-07-19 9 views

risposta

19

In generale, è possibile utilizzare il metodo findRecordByValue sulla casella combinata:

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

Interessante. Sono abbastanza nuovo per extJS, qual è la migliore pratica qui? –

+1

Buona domanda. A rischio di sembrare cliché, dipende dal tuo caso d'uso. Penso che ci siano 2 cose chiave da tenere a mente. Innanzitutto, l'evento 'select' è un evento UI, mentre l'evento' change' è un evento di cambiamento di stato. In secondo luogo, una casella combinata * utilizza * il suo archivio per facilitare la modifica del valore del campo sottostante tramite l'interfaccia utente. Di conseguenza, l'evento 'select' * corrisponde * sempre a un record nel negozio sottostante, ma l'evento' change' no. –

+0

Hmm Onestamente non so quale risposta sia corretta, perché, come hai sottolineato, la risposta giusta dipende dal caso d'uso. –

6

Capito subito dopo aver postato la mia domanda.

Il mio problema era che stavo legando all'evento sbagliato, stavo usando 'change' invece di 'selection'.

L'evento di selezione fornisce il record con l'intero oggetto in esso contenuto.

+5

essere consapevoli del fatto che l'evento 'select' sarà attivato solo se il valore cambia in quanto l'utente fa clic un'opzione sulla lista. Se 'setValue' è chiamato a livello di programmazione, solo' change' verrà attivato. –

Problemi correlati