2009-04-29 8 views
7

OK J'ai une zone de liste déroulante, le fournisseur de données est un tableau d'objets avec des propriétés d'étiquette qui donnent la liste d'options ComboBox.Flex: existe-t-il un moyen de lier l'élément selectedItem de ComboBox à une variable?

Y a-t-il une façon que je puisse avoir une variable comme mySelectedItem, et lier l'élément selected de la ComboBox de sorte que si elle change, l'élément selected de ComboBox changera à quoi que ce soit?

J'espère que cela a du sens.

Merci!

Répondre

16

Oui, la propriété selectedItem de ComboBox est bindable.

Ce serait quelque chose comme ceci:

<mx:ComboBox selectedItem="{mySelectedItem}"> 
</mx:ComboBox> 

Dans votre AS:

[Bindable] 
var mySelectedItem:Object; 

Les modifications apportées à mySelectedItem devrait apparaître dans ComboBox. Vous pouvez obtenir des erreurs si l'élément référencé par mySelectedItem n'existe pas dans le DataProvider du ComboBox.

2

Utilisez un écouteur d'événement pour l'événement Change et effectuez votre traitement ici.

// update a label item's text with that of the Combobox's selectedItem 
private function changeEvt(event:Event):void { 
    label.text =event.currentTarget.selectedItem.label + " " + 
} 
9

Sur la surface, il est aussi simple que:

<mx:ComboBox id="myComboBox" 
    dataProvider="{myDataProvider}" 
    selectedItem="{defaultItem}"/> 

Lorsque vous définissez defaultItem (assurez-vous qu'il est [Bindable]) à l'un des éléments du fournisseur de données, il mettra à jour le contrôle.

Mais cette approche présente des problèmes. Sauf si currentDefaultItem change toujours APRES myDataProvider, la liaison à dataProvider peut annuler la sélection, en revenant à la valeur par défaut (premier élément de la liste). Une solution consiste à forcer selectedItem à être rebondi après dataProvider, en incluant dataProvider dans l'appel fournissant l'élément selectedItem.

<mx:ComboBox id="myComboBox" 
    dataProvider="{myDataProvider}" 
    selectedItem="{getSelectedItem(myComboBox.dataProvider, defaultItem)}"/> 

Ce que cela fait est d'assurer selectedItem sera rebond lorsque soit des changements currentDefaultItem, ou après les changements dataProvider. Je serais intéressé par d'autres solutions moi-même.

1

Je sais comment cela est décrit dans la documentation. Comme lors d'une modification de l'élément sélectionné, l'écouteur change. Cependant pour moi, cela n'arrive pas. Quelqu'un d'autre rencontre le même comportement?

+0

Je l'ai remarqué avec selectedIndex. – Panzercrisis

1

ou, vous pourriez faire quelque chose comme ça si vous ne me dérange pas étendre ComboBox; Ce est pseudocode (désolé, l'identification des matchs dépend du type d'objet) - mais vous voyez l'idée ...

public class IndexRetainingComboBox extends ComboBox 
{ 
    public function IndexRetainingComboBox() 
    { 
     super(); 
    } 

    override public function set dataProvider(value:Object):void 
    { 
     var originalSelection:Object = this.selectedItem; 
     super.dataProvider = value; 
     var newIdx:uint = [find originalSelection idx in combobox or return 0 ] 
     this.selectedIndex = newIdx; 
    } 
} 
Questions connexes