2009-07-17 4 views
1

J'ai une interface MXML Flex qui construit un ensemble de boutons radio à l'aide du composant Repeater:Y at-il un moyen de choisir un composant MXML au moment de la construction de l'interface utilisateur en fonction de la valeur d'un champ?

<mx:Repeater id="radios" 
      dataProvider="{_lists.(@id == [email protected]_list).group.listItem}"> 
    <mx:RadioButton groupName="responses" 
        label="{[email protected]}" 
        data="{[email protected]}"/> 
</mx:Repeater> 

Ce que je veux faire est d'avoir le composant dans le répéteur - le RadioButton dans cet exemple - être choisi en fonction de la valeur d'une propriété de radios.currentItem: Si la valeur de currentItem est "foo", par exemple, je veux un Button là, ou si c'est "bar" je veux un RadioButton. Est-il possible d'effectuer ce type de construction conditionnelle dans un composant MXML, ou dois-je revenir à ActionScript pour le faire?

Je pense à quelque chose le long de ces lignes:

<mx:Repeater id="r" dataProvider="{list}"> 
    <mx:If test="{[email protected] == 'radio'}"> 
     <mx:RadioButton label="{[email protected]}" /> 
    </mx:If> 
    <mx:If test="{[email protected] == 'specify'}"> 
     <custom:Specify label="{[email protected]}" /> 
    </mx:If> 
</mx:Repeater> 

Répondre

4

Le bon (et vraiment seulement) moyen de le faire serait avec une boucle ol » for simple et ActionScript:

for each (var o:Object in yourDataProvider) 
{ 
    if (o.someProperty) 
    { 
     var rb:RadioButton = new RadioButton(); 
     yourContainer.addChild(rb); 
    } 
    else 
    { 
     var s:Specify = new Specify(); 
     yourContainer.addChild(s); 
    } 
} 

Vous pouvez faire comme slashnick suggère, et il suffit d'ajouter les deux composants à chaque itération du répéteur, basculer leur affichage en fonction d'un test de quelque sorte (dans ce cas, Je suggérerais probablement d'inclure aussi l'attribut includeInLayout), mais vous pourriez gonfler votre liste d'affichage en le faisant, et cela ne changera pas - finalement, vous finissez par le faire dans ActionScript de toute façon.

2

Je pense que vous devez utiliser le script d'action pour toutes les conditions. Une instruction conditionnelle ne semble pas exister dans mxml. Bien que vous pouvez inclure les deux éléments et utiliser en ligne pour définir l'état visible.

<mx:Repeater id="r" dataProvider="{list}"> 
    <mx:RadioButton label="{[email protected]}" visible="{[email protected] == 'radio'}" /> 
    <custom:Specify label="{[email protected]}" visible="{[email protected] == 'specify'}" /> 
</mx:Repeater> 

Voir http://www.firemoss.com/post.cfm/Powerful-MXML-Bindings-with-Ternary--Operators pour plus d'exemples.

0

Je voudrais utiliser AS3 pour cela. Mon avis est qu'il est préférable d'utiliser mxml pour l'affichage et AS3 pour la logique ... similaire à comment dans. Net vous avez le code-derrière

+0

Donc, je suis coincé la création de composants à la main, ce qui signifie que je dois gérer toutes les liaisons de données à la main aussi, non? Quelle est la meilleure façon d'accomplir cela? –

Questions connexes