Se si dispone di una selezione di una combobox supportata da archivio che attiva un evento in ExtJS 4, come posso ottenere l'oggetto completo rappresentato da tale selezione?Come ottenere l'oggetto modello completo da una casella combinata in ExtJs?
13
A
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...
}
});
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. –
Interessante. Sono abbastanza nuovo per extJS, qual è la migliore pratica qui? –
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. –
Hmm Onestamente non so quale risposta sia corretta, perché, come hai sottolineato, la risposta giusta dipende dal caso d'uso. –