2009-11-12 4 views
0

Vous vous demandez si quelqu'un connaît un composant existant qui sous-classe ComboBox mais vous permet de spécifier un élément dans la liste avec un libellé comme "all" ou "none" qui définira selectedItem sur null? J'ai envisagé d'en écrire une, et en raison des composants internes de la composante, il semble que beaucoup de travail, donc je me demande si quelqu'un l'a déjà fait? A quoi ressemblerait une ComboBox si aucun élément n'est sélectionné?Sous-classe Flex ComboBox avec option "Null"/"All"?

+0

Pour clarifier les choses, je veux un combobox qui vous permet de revenir à l'état par défaut de selectedItem = null, mais fonctionne toujours normalement. Je ne veux pas construire des listes personnalisées et les envoyer à un combobox normal. – Sophistifunk

Répondre

0

Ou tous les articles sélectionnés pour cette question? Il semble que vous devriez utiliser un List au lieu d'un ComboBox. Regardez les contrôles de liste sur Tour de Flex.

+0

Cela ressemblerait à la première fois que vous le voyez, que rien ne s'affiche ou que le contenu du champ d'invite s'affiche. – Sophistifunk

0

Que diriez-vous quelque chose comme this.

0

Exécuter ceci:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%" creationComplete="onCreationComplete()"> 
    <mx:Script> 
     <![CDATA[ 
      private var myData:Array = new Array(); 

      [Bindable] 
      private var comboData:Array = new Array(); 

      [Bindable] 
      private var selectedData:String = ""; 

      private function onCreationComplete():void 
      { 
       myData.push({"label" : "First", "value" : "First"}); 
       myData.push({"label" : "Second", "value" : "Second"}); 
       myData.push({"label" : "Third", "value" : "Third"}); 

       comboData.push({"label" : "<None>", "value" : "<None>"}); 
       comboData.push({"label" : "<All>", "value" : "<All>"}); 
       for(var i:int = 0; i < myData.length; i++) { 
        comboData.push(myData[i]); 
       } 
      } 

      private function onSmartComboBoxChange():void 
      { 
       if(smartComboBox.selectedItem) { 
        if(smartComboBox.selectedItem.value == "<None>") { 
         selectedData = ""; 
        } else if(smartComboBox.selectedItem.value == "<All>") { 
         selectedData = ""; 
         for(var i:int = 0; i < myData.length; i++) { 
          selectedData += myData[i].value + ", "; 
         } 
        } else { 
         selectedData = comboData[smartComboBox.selectedIndex].value; 
        } 
       } 
      } 
     ]]> 
    </mx:Script> 
    <mx:VBox> 
     <mx:ComboBox id="smartComboBox" dataProvider="{comboData}" change="onSmartComboBoxChange()" labelField="label" /> 
     <mx:Label id="selectedDataLabel" text="{selectedData}" /> 
    </mx:VBox> 
</mx:Application>