2009-08-26 9 views
0

J'essaie de propager une affectation au paramètre de données d'un sous-composant via le setter de son composant parent. Comme ceci:Flex 3: L'affectation de données à un sous-composant échoue dans un composant MXML dans le bloc de script d'action

<CustomComponent 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns="components.*" 
    > 
    <mx:Script> 
     <![CDATA[ 
      public override function set data(val:Object):void 
      { 
       super.data = val; 

       subComponent.data = val; //ref #1 
      } 
     ]]> 
    </mx:Script> 
    <CustomSubComponent id="subComponent" 
     /> 
</CustomComponent> 

Lorsque j'ai exécuté mon application, le sous-composant n'a jamais reçu ses données. Lors du débogage et du pas à la ligne marquée "ref # 1", le débogueur saute hors de la méthode et passe à autre chose comme si la méthode était terminée. Il semble qu'il y ait eu une exception ou une erreur mais la console ne donne aucune indication sur ce qui ne va pas dans cette affectation.

Est-ce que je fais quelque chose de stupide ici? Cela semble assez simple.

Environnement: Ceci utilise Flex SDK 3.2, avec le plugin Flex Builder 3 pour Eclipse sous Windows, avec Flash 9 Debug ver. pour IE7.

Note: Avec cet exemple particulier, j'essaie d'éviter la liaison à dessein. Je veux dire, pourquoi ne puis-je pas pousser manuellement les données vers le sous-composant plutôt que de le lier?

Répondre

2

Flex supprime les erreurs dans des setters de données, parce que des choses est souvent nulle. Le problème est probablement que votre sous-composant n'est pas initialisé lorsque les données set sont appelées. Si vous ne pouvez vraiment pas utiliser la liaison (méthode facile et propre), vous devez retarder la définition des données du sous-composant jusqu'à ce qu'il soit initialisé avec invalidateProperties/commitProperties.

Dans le dataset, appelez invalidateProperties() et définissez un indicateur indiquant qu'ils ont été modifiés. Remplacez commitProperties (n'oubliez pas d'appeler super), vérifiez l'indicateur et, si c'est le cas, définissez les données du sous-composant.

Si votre bloc commitProperties n'est jamais appelé, essayez invalidateProperties sur creationComplete.

0

Sur quels composants repose votre composant personnalisé et sous-composant? Que prolongent-ils?

J'ai essayé un exemple de base prolongeant HBox et VBox et tout s'est bien passé.

Vous pouvez voir le résultat here, vue de la source activée.

Je suppose que je n'ai eu aucun problème car j'étends des composants qui sont ajoutés à la liste d'affichage, donc cela fait partie de leur cycle de vie de vérifier avec les parents pour les mesures/données/etc.

Hope it helps

+0

Tous mes composants personnalisés sont des toiles. – DyreSchlock

+0

Avez-vous vraiment besoin du positionnement absolu? Je suppose que la hiérarchie n'est pas mise à jour de la même manière pour les conteneurs absolus par opposition aux conteneurs relatifs. Vous devriez être en mesure de remplacer la façon dont est mis à jour. Je vais jeter un coup d'oeil plus tard à la maison si ça aide. –

Questions connexes