2010-01-26 3 views
1

Maintenant, j'ai un composant Accordion dans Flex qui a deux enfants, je veux donner aux enfants une référence à mon modèle d'application quand ils ont terminé leur instanciation (après l'indice de changement d'accordéon).Quelle est la bonne façon de mettre à jour les enfants Accordion dans Flex?

La notation suivante échoue pour moi parce que les enfants sont instanciés après l'événement est déclenché (méthode accordionChange):

<mx:Accordion change="accordionChange(event)" > ... 

Alors ce que j'ai fait actuellement est d'ajouter un creationComplete à chaque enfant d'accordéon qui sera ensuite assigner la référence du modèle:

<?xml version="1.0" encoding="utf-8"?> 
<pod:InspectorClass xmlns:pod="pod.*" xmlns:mx="http://www.adobe.com/2006/mxml" > 
<mx:Accordion id="accordion" color="0x323232" width="100%" height="100%"> 
    <mx:VBox label="Card Front" creationComplete="setChildModel()" > 
     <pod:FaceInspector id="frontFaceInspector"/> 
    </mx:VBox> 
    <mx:VBox label="Card Back" creationComplete="setChildModel()" > 
     <pod:FaceInspector id="backFaceInspector"/> 
... 

Ma classe InspectorClass contient une méthode "code derrière" qui ressemble à ceci:

public function setChildModel():void 
    { 
     if (accordion.selectedIndex == 0) 
     { 
      frontFaceInspector.setModel(model); 
     } 
     else if (accordion.selectedIndex == 1) 
     { 
      backFaceInspector.setModel(model); 
     } 
    } 

Cela me semble maladroit, comme si je manquais le point d'un élément clé de Flex. J'apprécierais n'importe quel conseil quant à comment je devrais faire ceci, ceci semble être un modèle récurrent pour moi.

Merci,

Répondre

1

Vous pouvez simplement lier le modèle dans chacune de vos instances FaceInspector lorsque vous les déclarez en MXML.

En vous FaceInspector Classe (AS3/code-behind), assurez-vous que la propriété de votre modèle est publique et lisible.

[Bindable] 
public var model:Model; 

Ensuite, dans votre Main MXML (ou chaque fois que vous déclarez les instances de FaceInspector), qu'affecter la propriété modèle au modèle.

<pod:FaceInspector id="frontFaceInspector" model="{model}" /> 

J'espère que c'est ce que vous recherchez. De plus, si vos instances de FaceInspector n'ont besoin que d'accéder aux propriétés spécifiques de votre modèle, je vous suggère de rendre ces propriétés compatibles avec la classe Model et de les lier directement. Par exemple.

<pod:FaceInspector id="frontFaceInspector" currentIndex="{model.sceneIndex}" imageURL="{model.image_url}" /> 
0

Vous pouvez faire usage de createpolicy comme tous. en composant accordéon.

1

En fait, j'ai toujours vu l'utilisation d'écouteurs d'événements et l'obtention d'objets pour faire leur propre travail comme l'un des concepts clés de Flex et AS. Je pense que ce que vous faites est bien, mais comme Durai dit que vous pouvez ajouter

creationPolicy="all" 

Pour votre accordéon et vous pouvez tirer votre événement onchange.
ex:

<mx:Accordion id="accordion" color="0x323232" width="100%" height="100%" creationPolicy="all" change="accordionChange(event)"> 

Et BTW, probablement la seule raison qui se sent maladroit de vous est parce que ce n'est pas la façon dont vous l'origine par le faire. Je sais que je me sens toujours comme un hack lorsque je dois contourner quelque chose, même lorsque cette solution de contournement est supérieure à mon intention initiale.

Questions connexes