Question

Ma demande contient actuellement un certain nombre de widgets qui sont gérés par un gestionnaire de widgets. Lorsque l'utilisateur clique sur un widget (par exemple un widget Helper), les charges gérant Widget du widget dans un domaine d'application de la fratrie séparée avec la ligne de code suivant:

wgtInfo.load(null, null, null, moduleFactory); //wgtInfo = IModuleInfo

Cependant, je ne peux pas utiliser les variables et les fonctions du widget plus tard. Je tente de trouver le widget Aide de la liste du widget directeur des widgets, et je fais avec succès. Mais lorsque je tente de caste Widget Aide à partir du type IBaseWidget (l'interface de toutes les actions de widgets) à taper HelperWidget, je reçois l'erreur suivante:

TypeError: Erreur # 1034: Type Coercion échoué .....

En effet, le domaine d'application de la classe en essayant d'utiliser le Helper widget est différent du domaine d'application du Widget Helper. J'ai essayé de résoudre ce problème en chargeant tous les widgets dans le même domaine d'application que le chargeur:

wgtInfo.load(ApplicationDomain.currentDomain, null, null, moduleFactory);

je reçois maintenant l'erreur suivante à chaque fois que je tente de charger un widget de l'aide:

TypeError: Erreur # 1009:. Impossible d'accéder à une propriété ou une méthode d'une référence d'objet null

Comment puis-je charger mon aide widget dans un domaine d'application commune qui est accessible par les autres widgets?

Était-ce utile?

La solution 3

Après avoir essayé plusieurs solutions sans succès (y compris les autres réponses sur cette page), je recours à un autre, événementiel, solution.

J'ai fini par l'envoi d'un événement personnalisé pour informer mes autres widgets lorsque le widget de Helper avait terminé son chargement:

(HelperWidget.mxml)

ViewerContainer.addEventListener(AppEvent.WIDGET_OPEN_TAB, widgetOpenTabHandler); //listen for other widgets to open a tab within the Helper Widget
ViewerContainer.dispatchEvent(new AppEvent(AppEvent.WIDGET_READY_OPEN_TAB)); //notify other widgets that loading is complete

Mes autres widgets écouter cet événement au feu et à la fin, l'expédition pour exécuter une fonction autre événement (AppEvent.WIDGET_OPEN_TAB) dans le widget Helper.

Autres conseils

Je crois que votre problème vient de la classe ne sont pas inclus dans le swf. Ceci est parce que Flash ne compile pas dans les classes dans un swf si elles ne sont pas utilisés pour réduire la taille du fichier. Pour éviter cela, il vous suffit de créer une variable avec la classe d'aide dont vous avez besoin dans cette classe, comme ceci:

private var helper:HelperWidget;

voir si cela aide.

je vais republier mon « commentaire » comme une vraie réponse. Je devine que l'erreur ne se fonde pas sur la ApplicationDomain mais basée sur les classes que vous êtes dans votre module compilé. Lorsque Flex compile le fichier SWF, il optimise automatiquement les classes non utilisées hors du fichier SWF. Vous pouvez les forcer à revenir dans le fichier SWF dans l'une des deux façons suivantes:

  1. Utilisez l'argument du compilateur comprennent-bibliothèques pour forcer le compilateur Flex pour ajouter la classe à votre SWF.
  2. Ajoutez une variable faux dans votre application afin que le compilateur Flex pense qu'il est utilisé et l'ajoute au fichier SWF final. Quelque chose comme ça.

    private var myFakeObject: HelperWidth;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top