2011-01-26 9 views
6

Ho bisogno di aiuto per impostare in modo programmatico l'elemento selezionato in una casella combinata.Flex: impostazione programmatica dell'elemento scelto in un ComboBox

Ho una casella combinata in questo modo:

<mx:ComboBox id="MyComboBox" change="puzzleHandler(event);" prompt="Make a Selection"> 
    <mx:ArrayCollection id="myDP"> 
     <mx:Object id="first" label="Label 1" series="2" pageTitle="Title 1"/> 
     <mx:Object id="second" label="Label 2" series="7" pageTitle="Title 2"/>           
     <mx:Object id="third" label="Label 3" series="9" pageTitle="Title 3"/>           
    </mx:ArrayCollection> 
</mx:ComboBox> 

Ho una funzione che riguarda deep linking. Se qualcuno inserisce l'url: www.mysite.com/#view=2 verranno portati nella parte appropriata del sito (senza aver selezionato Label 2 nel comboBox). Come posso impostare la comboBox in modo programmatico, in modo che corrisponda a ciò che l'utente sta guardando?

Nell'istruzione switch della mia funzione, voglio impostare il comboBox sull'etichetta che corrisponde alla vista. Se "view = 2", la comboBox dovrebbe mostrare "Label 2" come selezionato.

case "view=1": 
     MyComboBox.selectedItem.label="Label 1"; 
     parseUrl(); 

    case "view=2": 
     MyComboBox.selectedItem.label="Label 2"; 
     parseUrl(); 

    case "view=3": 
     MyComboBox.selectedItem.label="Label 3"; 
     parseUrl(); 

Ho provato questo: MyComboBox.selectedItem.label = "Etichetta 1" Ma non funziona. Eventuali suggerimenti?

Grazie.

-Laxmidi

risposta

8

Se non si desidera cambiare oggetto del selectedItem; si desidera modificare l'oggetto selezionato o l'indice selezionato. Prova questo:

case "view=1": 
    MyComboBox.selectedIndex=0; 
    parseUrl(); 

case "view=2": 
    MyComboBox.selectedIndex=1; 
    parseUrl(); 

case "view=3": 
    MyComboBox.selectedIndex=2; 
    parseUrl(); 

SE si desidera impostare il selectedItem anziché il selectedIndex dovrete ciclo su dataProvider di trovare la voce reale in base al valore/URL caso. Qualcosa del genere:

for each(var tempObject : Object in myList.dataProvider){ 
    if(tempObject.label == urlValue){ 
    MyComboBox.selectedItem = tempObject; 
    break; 
} 
} 

Il secondo approccio è più flessibile a lungo termine.

+0

Ciao, Flextras.com, di te per l'aiuto. Sono andato con l'opzione 2 e ha funzionato alla grande. Grazie! – Laxmidi

+0

@Laxmidi Felice di aiutare. Non dimenticare di accettarlo come risposta corretta. – JeffryHouser

+0

+1 Perché non posso accettare la risposta :) – zawhtut