2010-07-01 2 views
4

J'ai une application principale (app.swf) qui charge un module (profiles.swf) et le module profiles charge un autre module (member_profile.swf). Dans member_profile, j'obtiens des données de membre du côté serveur où un objet de type Member est retourné. L'objet renvoyé contient un tableau appelé Jobs contenant des objets de type MemberJob. Dans le module member_profile, une fonction prend un paramètre de type MemberJob pour afficher les détails du travail. J'ai une boucle qui passe par le tableau retourné et appelle la fonction pour chaque élément du tableau comme celui-ci:Type La coercition a échoué pour la même classe

for(i = 0; i < member.Jobs.length; i++) 
    addJob(member.Jobs[i]); 

Je reçois une erreur à la ligne de AddJob:

type Coercion a échoué: ne peut pas convertir les composants. classes :: MemberJob @ 19107d81 à components.classes.MemberJob.

Et je reçois toujours cette erreur lors du deuxième chargement du module member_profile. Je veux dire que ce module est chargé quand je clique sur le nom d'un membre du module de profils qui passe ce nom comme paramètre pour le sous-module pour charger le profil de ce membre incluant ses travaux. Donc si j'ai choisi de voir le profil du membre "X" le profil est chargé sans erreur mais si je clique sur le membre "Y" (ce qui provoque le rechargement du sous-module avec le nouveau paramètre) alors j'obtiens le type coercition Erreur. Et si j'ai fait le contraire cliquez d'abord sur "Y" puis "X" la même chose arrive, erreur dans la deuxième charge.

Quelqu'un peut-il m'aider à ce sujet?

+0

peut vous envoyer le code pour la fonction AddJob .. peut-être le problème est là – Treby

+0

Je suppose que ce qui se passe est que Flash enregistre une nouvelle définition de 'components.classes.MemberJob' chaque fois que vous chargez le fichier SWF. La deuxième définition, bien qu'elle soit exactement la même en termes de contenu que la première, est traitée comme un type différent de celui par défaut et donc comme une erreur. Soit il s'agit d'un bug, soit il vous manque un paramètre du compilateur pour ignorer les définitions dupliquées tout en travaillant avec les modules Flex. Je n'ai pas travaillé avec les modules Flex, donc ce n'est qu'une supposition. – Amarghosh

+0

Je ne pense pas que le problème est dans la méthode AddJob comme il ne fait rien d'attribuer les valeurs de l'objet du travail aux composants d'affichage, il ressemble à ceci: fonction publique AddJob (mj: MemberJob): void {\t \t \t \t jobTitle.text = mj.JobTitle; jobDescription.text = mj.JobDescription; jobLocation.text = mj.JobLocation; // et ainsi de suite } – Yasmine

Répondre

9

Relisez la section d'aide de Flex sur Module Domains et assurez-vous que vous avez importé la classe components.classes::MemberJob dans le domaine approprié.

EDIT:

Essayez de mettre les éléments suivants quelque part dans votre fichier d'application et voir si cela fait une différence:

import components.classes.MemberJob; 
private var memberJob:MemberJob; 
+0

je ne précise pas domaine d'application lors du chargement Comment puis-je m'assurer que la classe MemberJob est importée dans le bon domaine? La première ligne de la section "Module Domains" indique "Par défaut, un module est chargé dans un domaine enfant du domaine d'application actuel". Je ne spécifie pas un domaine d'application cela signifie que le module est chargé dans le domaine enfant de l'application actuelle, et il y a seulement un module qui utilise cette classe, donc je comprends que quand il est chargé, il possède la définition de classe de MemberJob. Je me suis trompé? – Yasmine

+0

J'ai placé l'imp déclaration ort et la déclaration de variable dans l'application principale et cela a fait une différence. Maintenant, il n'y a pas d'erreur. Mais je ne comprends pas ce qui est arrivé? Existe-t-il un autre moyen de résoudre ce problème au lieu de créer cette variable inutilisée dans l'application principale. L'application principale n'a besoin de la classe MemberJob dans rien. Merci. – Yasmine

+0

Pourriez-vous expliquer comment cette solution a résolu le problème? Cela signifie-t-il que chaque fois que j'ai ce problème, je devrais mettre la déclaration d'importation et une variable fictive dans l'application principale? Merci – Yasmine

Questions connexes