2010-04-16 4 views
0

Dire que j'ai le composant personnalisé suivant:propriétés initialize de composant personnalisé avant de créer des enfants flex

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx"> 
    <fx:Script> 
    <![CDATA[ 
     [Bindable] 
     public var prop:String; 

     private function formatProp() : String { 
      return "Hello, " + prop; 
     } 

    ]]> 
    </fx:Script> 

    <s:Label text="User: {prop}"/> 
    <s:Label text="Greeting: {formatProp()}"/> 
</s:Group> 

Si je l'ajoute à ma demande comme ceci:

<local:MyComponent prop="Hello"/> 

Le résultat ressemble à:

User: Mark 
Greeting: Hello, null

il semble Flex est mise prop sur mon composant personnalisé après a déjà initialisé les étiquettes enfants, donc il dépend de l'événement changé de propriété pour définir l'étiquette de l'utilisateur.

Y at-il une façon élégante de faire Flex attendre toutes les propriétés de mon composant à régler avant d'évaluer d'abord les liaisons?

Remarque: Je comprends la fonction formatProp est trivial et pourrait être inclus en ligne, mais ceci est juste un exemple simplifié.

+0

Avez-vous essayé d'exécuter votre metehod formatProp depuis l'événement creationComplete? – Robusto

Répondre

0

il n'est pas lié à livecycle composant, plus de règles contraignantes. Votre fonction "formatProp" devrait recevoir le paramètre "prop" en tant que paramètre afin d'être appelé lorsque le prop est modifié. Essayez ce code:

 private function formatProp(props:String) : String { 
      return "Hello, " + props; 
     } 
     <s:Label text="Greeting: {formatProp(prop)}"/> 
1

La "manière élégante" serait de fournir réellement la liaison de données, de sorte que vous puissiez changer votre propriété aussi après. Votre idée initiale avait l'air bien, en travaillant avec la réponse fournie par Cornel. Je voulais juste le mentionner car votre question ressemblait plus à celle que vous savez que votre liaison de données ne fonctionne pas et que vous vouliez simplement reporter le réglage initial de la variable. Si vous envisagez de créer des composants personnalisés dans Actionscript (au lieu de mxml), vous rencontrerez le problème inverse: les propriétés sont définies avant que vous ayez une chance de créer vos enfants, donc vous devrez peut-être les mettre en mémoire tampon si ils devraient effectivement influencer certaines propriétés des enfants.