URL Dynamique
Par Cédric Tabin le mercredi 07.01.2009, 08:00 - ActionScript - Lien permanent
Voila la dernière révision (r131) de Masapi en ligne ! J'y ai ajouté le support des URL dynamiques au moyen de variables prédéfinies. Cela permet de simplifier (et alléger) la gestion de chargement des fichiers, surtout lors de la prise en charge de plusieurs langues.
Comment est-ce que ça marche ? J'en ai donné un bref aperçu dans ce billet en expliquant le fonctionnement de base. Mais pour une utilisation standarde, la seule chose à savoir est qu'une variable (au sens masapi) se décrit comme ceci : ${nomVariable}.
var loader:CompositeMassLoader = new CompositeMassLoader(); var file:ILoadableFile = loader.addFile("./dossier/menus_${LANG}.xml"); trace(file); //./dossier/menus_${LANG}.xml (text)
Il est important de noter que l'URL enregistrée sera toujours l'originale. Le remplacement de la variable ne sera fait que lorsque le fichier sera chargé ! Cela permet de simplement relancer le chargement du MassLoader (ou du fichier) lorsqu'une variable est changée.
Reste à définir une valeur pour la variable 'LANG'... La manière la plus simple est de le faire dans la loadableFileFactory ainsi tous les autres fichiers utiliseront la même valeur.
var loader:CompositeMassLoader = new CompositeMassLoader(); var file:ILoadableFile = loader.addFile("./dossier/menus_${LANG}.xml"); trace(file); //./dossier/menus_${LANG}.xml (text) var factory:LoadableFileFactory = loader.lodableFileFactory; factory.defaultVariables.put("LANG", "fr"); loader.start(); //l'URL sera ./dossier/menus_fr.xml
Et lorsque la variable change, il suffit de relancer le chargement pour que la nouvelle URL soit automatiquement prise en compte :
//... factory.defaultVariables.put("LANG", "en"); loader.start(); //l'URL sera ./dossier/menus_en.xml
Un des principaux avantages est le management du code, car tous les écouteurs mis sur le MassLoader ou les fichiers n'ont pas besoin d'être modifiés car c'est bien le même ILoadableFile qui est rechargé avec une URL différente.
La seule contrainte restante (pour l'instant) est qu'il faut passer la propriété 'useCache' du MassLoader à false, sinon le fichier n'est pas rechargé. Ce détail sera corrigé lors de la prochaine révision !
Finalement, j'ai aussi mis à jour la spécification du XML des dépendances. Il est désormais possible d'utiliser des variables à l'intérieur de celui-ci, mais également d'en déclarer afin d'alléger le code.
<application> <variables> <var name="PICTURE_FOLDER">pictures</var> </variables> <files basePath="./${PICTURE_FOLDER}"> <file url="storm1.jpg" priority="11" type="swf" /> <file url="storm2.jpg" priority="-1" type="swf" /> <file url="storm3.jpg" priority="-1" type="swf" /> <file url="storm4.jpg" priority="0" type="swf" /> </files> </application>
Et grâce à la classe ApplicationConfigLoader, il est très simple de charger et parser le fichier XML. A noter qu'il n'est plus nécessaire d'avoir des dépendances à l'intérieur de celui-ci (pratique pour des galleries).
var configLoader:ApplicationConfigLoader = new ApplicationConfigLoader(); configLoader.addEventListener(Event.COMPLETE, onConfigLoaded); configLoader.load(new URLRequest("config.xml")); function onConfigLoaded(evt:Event):void { var appLoader:ApplicationMassLoader = new ApplicationMassLoader(); appLoader.addAll(); //ajoute tous les fichiers du contexte global dans la file de chargement appLoader.start(); }
Bien entendu, les deux méthodes de déclaration des variables (dans le code ou dans le XML) peuvent être combinées !
Commentaires
Super sympa le coups des variables.
Encore bravo pour Masapi.
A noter que désormais le bug est corrigé dans la révision 132
Vraiment bien comme update, merci