2009-02-26 2 views
0

J'ai une classe TitleWindow mxml qui a plusieurs composants, et les auditeurs. Sur sa creationComplete et l'etat d'initialisation j'ajoute des ecouteurs qui ecoutent des evenements sur son interface graphique.Flex et fausse initialisation Mxml sans réellement montrer le composant, (plus insise)

Cette TitleWindow s'affiche uniquement lorsque l'utilisateur clique sur un « bouton », j'ai fait TitleWindow un singleton avec le code suivant:

public static function getInstance():MyWindow 
{ 
    if (MyWindow.singleton) 
    { 
     return MyWindow.singleton; 
    } 
    else{ 
     MyWindow.singleton = new MyWindow(); 
     return MyWindow.singleton; 
    }    
} 

je besoin d'un singleton parce que l'utilisateur appellera cette fenêtre à plusieurs reprises que autant qu'il veut et j'en ai seulement besoin. Le problème est le suivant sur certains événements externes spéciaux j'ai besoin de "modifier" certains écouteurs (supprimer les écouteurs et en ajouter de nouveaux) sur un bouton de MyWindow, avant même qu'il ne soit montré une seule fois.

J'ai toujours MyWindow.getInstance() en mémoire lorsque mon application démarre. Cependant, ajouter/supprimer des écouteurs ne semble pas avoir d'effet si le rendu réel des composants n'a pas eu lieu, événement lors de l'utilisation du code suivant au démarrage de l'application.

myWindow= MyWindow.getInstance(); 
    myWindow.initialize(); 

Non si je suprisingly "show" ('rendu') le myWindow au moins une fois alors les modifications d'événements sur l'instance myWindow fonctionne parfaitement.

Comment est-ce que je peux simuler le complète l'initialisation de ce composant sans le montrer au démarrage?

Merci!

Répondre

2

Quel type de conteneur contient votre bouton? Si vous utilisez un Multiple View Container, vous pouvez essayer de définir le creationPolicy sur all. Single View Containers créer tous leurs enfants en une seule fois et vous ne devriez pas faire face à ce problème.

De Flex 3.0 docs je pourrais récupérer ceci:

La politique de création par défaut pour tous les conteneurs, à l'exception du conteneur d'application, est la politique du conteneur parent. La stratégie par défaut du conteneur Application est auto.

Cela semble être la cause de tous vos problèmes.

Mise à jour: je ne mentionnais pas plus tôt, car je pensais que ce devait être prévu :) Réglage de la creationPolicy-all rend votre charge d'application plus lentement. Donc, lisez sur Ordered Creation - cette technique vous aide à choisir si les contrôles sont affichés en une seule fois (ce qui est le comportement par défaut, après que tous les contrôles ont été créés) ou étape par étape, au fur et à mesure sont créées.

+0

Vous avez raison, maintenant le problème est que l'initialisation de cette fenêtre particulière au démarrage prend 2 secondes et accroché le système, je me demande s'il y a un événement à savoir lorsque le rendu est terminé – coulix

+0

sait déjà ça :) – dirkgently