Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS1/AS2
AS1/AS2 Questions relatives à la programmation ActionScript 1 et 2 (Cours AS2)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/04/2006, 13h06   #1
Membre Expert
 
Avatar de Demco
 
Inscription : mai 2002
Messages : 1 396
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2002
Messages : 1 396
Points : 1 411
Points : 1 411
Par défaut [FLASH MX2004] [AS2] Attendre la fin de chargement d'un fichier avant de continuer.

Bonjour,

Dans le code suivant le constructeur appelle une methode qui contient une fonction(sur l'evenement onLoad) qui ouvre un fichier XML. Cette fonction affiche 1 dans la fenetre lorsquelle est executee.
Je souhaiterais qu'il attende d'avoir fini de charger le fichier pour continuer.
Pour que vous voyez l'ordre d'execution, je vous dirai qu'il m'affiche :
2
1

Et biensur ... je voudrais :
1
2
Cela signifie qu'il sort de la fonction getXMLMenu() avant meme d'avoir chargé le fichier, et je veux empecher cela.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Page2{
    //declare class attributes
    public var _xmlMenu:String;
    private var _document:XML;
    private var myInterval;
 
    //Constructor that
    function Page2(xmlMenu:String){
        _xmlMenu = xmlMenu;
        getXMLMenu();
        trace("2");
    }
 
 
    private function getXMLMenu():Void{
        _document=new XML(); //we create the XML object
        _document.ignoreWhite=true;// useless spaces are erased
        _document.load(_xmlMenu);//we load the XML file
        _root.stop();
 
        var instance = this;
        //trace("testLoaded: "+_document.loaded);
        // Once the file is loaded ...
        _document.onLoad=function(){
            trace("1");
        }
    }    
}
Je me suis pas mal penche sur setInterval sans succes. Je sais l'utiliser, mais je n'arrive pas vraiment a determiner comme elle peut servir mon probleme.

Merci a vous.
__________________
J'aime les gâteaux.
Demco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 13h24   #2
Membre Expert
 
Avatar de Demco
 
Inscription : mai 2002
Messages : 1 396
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2002
Messages : 1 396
Points : 1 411
Points : 1 411
Pour le moment je vais essayer de créer une nouvelle fonction "ApresChargementFichierXML" que j'appelle dans le OnLoad. Si quelqu'un a une meilleure idée qu'il n'hesite pas. Car ma bidouille ne sera pas toujours applicable.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Page2{
    //declare class attributes
    public var _xmlMenu:String;
    private var _document:XML;
    private var myInterval;
 
    //Constructor that
    function Page2(xmlMenu:String){
        _xmlMenu = xmlMenu;
        getXMLMenu();
    }
 
    private function afterLoadXML(){
         trace("2");
    }
 
 
    private function getXMLMenu():Void{
        _document=new XML(); //we create the XML object
        _document.ignoreWhite=true;// useless spaces are erased
        _document.load(_xmlMenu);//we load the XML file
        _root.stop();
 
        var instance = this;
        //trace("testLoaded: "+_document.loaded);
        // Once the file is loaded ...
        _document.onLoad=function(){
            trace("1");
            instance.afterLoadXML(); //appel de la nouvelle fonction
        }
    }    
}
__________________
J'aime les gâteaux.
Demco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 13h45   #3
Membre Expert
 
Avatar de Demco
 
Inscription : mai 2002
Messages : 1 396
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2002
Messages : 1 396
Points : 1 411
Points : 1 411
Decidement de poster ca donne des idées ...

Voici une solution qui semble bien fonctionner :

de l'endroit ou vous declarez une instance de classe mettez :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var menuPage = new Page2(xmlFile);
myInterval = setInterval(isLoadedXML, 10);
 
function isLoadedXML(){
    trace("Main.isLoadedXML Drapeau: "+menuPage._Drapeau);
    if (menuPage._Drapeau == true){
        trace("c'est a true");
        clearInterval(myInterval); //on efface l'interval pour arreter de tourner en rond
        afterLoadedXML(); //on appelle la fonction qui se charge du reste du traitement une fois que le fichier est chargé        
    }
}
 
function afterLoadedXML(){
    trace("je continue mon traitement ....");
}
Et voici ma classe :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Page2{
    //declare class attributes
    public var _xmlMenu:String;
    private var _document:XML;
    public var _Drapeau = false;
 
    //Constructor that
    function Page2(xmlMenu:String){
        _xmlMenu = xmlMenu;
        getXMLMenu();
    }
 
    private function getXMLMenu():Void{
        _document=new XML(); //we create the XML object
        _document.ignoreWhite=true;// useless spaces are erased
        _document.load(_xmlMenu);//we load the XML file
        _root.stop();
        trace("0");
        var instance = this;
        // Once the file is loaded ...
        _document.onLoad=function(){
            trace("1");
            instance._Drapeau = true;//j'indique que le fichié est chargé
        }
    }    
}
Bon dans cet exemple j'ai mis des attributs de classe en public ... pour faciliter les tests. Il faut adapter.

Mais je n'en suis pas complement satisfait, donc toute idée est la bienvenue.
__________________
J'aime les gâteaux.
Demco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 14h18   #4
Rédacteur
 
Avatar de freegreg
 
Inscription : août 2002
Messages : 4 395
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : août 2002
Messages : 4 395
Points : 5 227
Points : 5 227
Salut,

perso, c'est ta solution 2 que j'utilise

Ps: Peux-tu ajouter le tag de la version que tu utilises dans le titre de ton 1er message ? Merci
__________________
Avant toutes questions, consultez nos différentes ressources disponibles gratuitement : XML, Développement Web, Flash/Flex, (X)HTML, CSS, JavaScript, AJAX, ASP
Vous voulez partager des ressources concernant les technologies ci-dessus : contactez-moi
freegreg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 14h20   #5
Membre Expert
 
Avatar de Demco
 
Inscription : mai 2002
Messages : 1 396
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2002
Messages : 1 396
Points : 1 411
Points : 1 411
On peut egalement utiliser ce systeme dans la classe directement.

Il suffit d'ecrire la fonction isLoadedXML dans la methode getXMLMenu. Et biensur de mettre le setInterval dans getXMLMenu, juste apres avoir appele la methode Load de l'objet LoadVars.

Cela peut servir dans le constructeur par exemple si l'on veut attendre la fin du chargement d'un fichier dont le contenu sera utilise dans les lignes suivantes.
__________________
J'aime les gâteaux.
Demco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 14h23   #6
Membre Expert
 
Avatar de Demco
 
Inscription : mai 2002
Messages : 1 396
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2002
Messages : 1 396
Points : 1 411
Points : 1 411
Citation:
Envoyé par freegreg
perso, c'est ta solution 2 que j'utilise
Merci pour ce commentaire ! Ainsi je continue mon developpement l'esprit tranquille.
__________________
J'aime les gâteaux.
Demco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2007, 15h13   #7
Invité de passage
 
Inscription : mai 2005
Messages : 17
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 17
Points : 3
Points : 3
Bonjour,

Je cherche à faire un peu la même chose que vous, avec un fichier XML. J'ai plusieurs fichiers à charger, et la solution que vous proposez donne plusieurs fonctions imbriquées : alourdie un peu le code.

J'ai cherché, mais je n'ai rien trouvé qui permette de :

- charger le fichier 1
- attendre la fin du chargement

- charger le fichier 2
- attendre la fin du chargement

- etc ...

- traiter les données

Connaissez-vous une autre solution ?

Merci,
vence est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h30.


 
 
 
 
Partenaires

Hébergement Web