2008-11-22 7 views
1

J'ai un problème avec répéteurs enfants databinding l'intérieur d'un contrôle d'accordéon, vous pouvez nous l'espérons aider ...Flex Aide: redoublants ne pas répéter dans un contrôle Accordian

j'ai un accordéon dans un ViewStack (dont, que ViewStack est également dans un autre ViewStack de niveau supérieur). J'ai un répétiteur dans chaque enfant du contrôle d'accordéon. Le composant ressemble à tel:

 

<mx:Box 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    creationComplete="init()" 
> 
<mx:ViewStack> 
... 
<mx:Accordion creationComplete="accordianInit()"> 
    <mx:Box label="Groups" width="100%"> 
     <mx:Repeater id="rpGroups" width="100%"> 
      <mx:CheckBox id="chkGroups" 
       label="{rpGroups.currentItem.name}" /> 
     </mx:Repeater> 
    </mx:Box> 
    <mx:Box label="Contacts"> 
     <mx:Repeater id="rpContacts"> 
      <mx:CheckBox id="chkContacts" 
       label=quot;{rpContacts.currentItem.full_name}" /> 
     </mx:Repeater> 
    </mx:Box> 
</mx:Accordion> 
... 
</mx:ViewStack> 

<mx:Box> 
 

Le problème est que si je lie les 2 répéteurs dans la fonction init , puis les deux répéteurs ne présentent pas de données. Si je lie les répéteurs dans la fonction accordianInit, seul le premier répéteur (rpGroups) obtient DataBound ...

Où dois-je avoir des données liant les répéteurs pour que les deux répéteurs répètent correctement?

J'espère que cela a du sens, sinon je peux élaborer plus, toute aide est appréciée.

Répondre

1

Liez le dataProvider du répéteur à la source dans MXML lui-même: ne crée pas l'ensemble de ses enfants

<mx:Repeater dataProvider="{the_data}" ... /> 

La raison pour laquelle vous voyez le comportement que vous êtes est parce que l'accordéon (et ViewStack) droit un moyen. Il crée uniquement l'enfant visible (ainsi, la première boîte et le premier enfant ViewStack initialement). En raison de ce comportement, lorsque vous essayez d'affecter des données aux répéteurs dans le premier gestionnaire d'événements init(), les répéteurs n'ont aucun conteneur instancié dans lequel répéter les enfants. Lorsque vous attribuez des données aux répéteurs dans accordéionInit(), seule la première boîte a été créée, ce qui explique pourquoi seul le premier répéteur fonctionne. Si vous ne souhaitez pas lier les données via l'attribut dataProvider de la balise Repeater (comme je l'ai montré ci-dessus), vous pouvez utiliser un gestionnaire de changement sur l'accordéon pour définir les données du répéteur en tant qu'utilisateur modifie les volets (car lorsque l'utilisateur clique sur les volets, ils sont créés par le framework Flex).

Tout cela a lieu du creationPolicy propriété: http://livedocs.adobe.com/flex/3/html/layoutperformance_05.html

Questions connexes