Flex ComboBox, valore predefinito e provider di dati
-
09-06-2019 - |
Domanda
Ho un Flex ComboBox
che viene popolato da a dataprovider
va tutto bene...
Ora vorrei aggiungere un'opzione predefinita "- seleziona un elemento --" all'indice 0, come posso farlo e utilizzare comunque un dataprovider
?Non ho visto nessun esempio di questo tipo, ma non riesco a immaginare che sia difficile...
Soluzione
Se non è necessario che l'elemento predefinito sia selezionabile, è possibile utilizzare il file prompt
proprietà di ComboBox
e impostare il selectedIndex
a -1.Questo mostrerà la stringa che hai impostato propmt
come valore selezionato finché l'utente non ne sceglie un altro.Tuttavia non apparirà nell'elenco delle opzioni.
Altri suggerimenti
Mi sono imbattuto in questo problema oggi e volevo condividere la mia soluzione.
Ho un ComboBox che ha un ArrayCollection contenente oggetti come provider di dati.Quando l'applicazione viene eseguita, utilizza un RemoteObject per uscire e ottenere ArrayCollection/Objects.Nel mio gestore eventi per quella chiamata ho semplicemente aggiunto un altro oggetto all'inizio di ArrayCollection e selezionarlo:
var defaultOption:Object = {MyLabelField: "Select One"};
myDataProvider.addItemAt(defaultOption, 0);
myComboBox.selectedIndex = 0;
Questo è l'aspetto del mio ComboBox come riferimento:
<mx:ComboBox id="myComboBox" dataProvider="{myDataProvider}" labelField="MyLabelField" />
Il modo in cui ho affrontato questo problema in passato è stato creare una nuova raccolta che fungesse da fornitore di dati per la casella combinata, quindi ascolto le modifiche alla fonte originale (usando un mx.BindingUtils.ChangeWatcher
).Quando ricevo una notifica di questo tipo, ricrea il mio fornitore di dati personalizzato.
Vorrei conoscere un modo migliore per affrontare questo problema;Monitorerò questa domanda per ogni evenienza.
Questo può essere utilizzato seguendo il codice per il valore predefinito selezionato della casella combinata
var index:String = "foo";
for(var objIndex:int = 0; objIndex < comboBox.dataProvider.length; objIndex++) {
if(comboBox.dataProvider[objIndex].label == index)
{
comboBox.selectedIndex = objIndex;
break;
}
}
<mx:ComboBox id="comboBox" dataProvider="{_pageIndexArray}" />