2010-08-04 9 views
0

J'ai un fichier journal externe dont le nom change à chaque session, avec le format XXXXX.logAS3, Pass variable externe à une fonction

je dois le charger dans un swf pour montrer ses données, mais chaque fois que le nom du journal est différent, j'ai besoin d'ouvrir le .fla, en changeant le nom du fichier et en republiant le swf.

J'ai donc fait un script simple pour charger une autre txt, taper manuellement dans ce numéro 5 du nom log's et le charger à l'extérieur à l'intérieur du swf:

var logNumLoader:URLLoader = new URLLoader(); 
logNumLoader.dataFormat=URLLoaderDataFormat.VARIABLES; 
logNumLoader.addEventListener(Event.COMPLETE, loadedLogNum); 
logNumLoader.load(new URLRequest("infoLogNum.txt")); 

function loadedLogNum(e:Event):void { 

     trace(e.target.data.logNum); // HOW TO GET THE VALUE OF logNum... *(see below) 

     } 

Le « infoLogNum. txt » contient juste une variable, qui est le nom tapé manuellement de la .log, comme:

logNum=12345 

ce script fonctionne parfaitement, car il génère la valeur de la variable, dans ce cas, « 12345 ».

Mais j'ai besoin de cette valeur « logNum » à passer dans une autre fonction qui charge et ouvre la XXXXX.log (voir dans le code en bas):

... 

var tracksLoader:URLLoader = new URLLoader(); 
tracksLoader.addEventListener(Event.COMPLETE,onTracksLoaded); 
tracksLoader.addEventListener(IOErrorEvent.IO_ERROR,onTracksError); 
tracksLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onTracksError); 

loadTracks(); 

function onTracksLoaded(e:Event):void { 
    trace("onTracksLoaded"); 
    parseTracks(tracksLoader.data); 
    reload.start(); 
} 

function onTimer(event:TimerEvent):void{ 
    loadTracks(); 
} 

function onTracksError(e:Event):void { 
    trace("onTracksError", e); 
    reload.start(); 
} 

function loadTracks():void { 
    tracksLoader.load(new URLRequest(logNum+".log")); // (*) ...AND SET THE logNum VALUE HERE 
} 

Bien que je ne peux pas affecter la valeur de logNum à la dernière fonction, le .log ne peut pas être ouvert.

Je n'ai aucune idée sur la façon de le faire fonctionner. Des idées, s'il vous plaît?

TIA.

Répondre

0

Peut-être quelque chose comme ceci:

function loadedLogNum(e:Event):void { 
    var logNum:String = e.target.data.split("=")[1]; // returns "12345" 
    tracksLoader.load(new URLRequest(logNum + ".log")); 
} 
+0

Je ne pouvais pas le faire fonctionner non plus. J'ai mis à jour le reste de mon code. Il existe un autre URLLoader pour le fichier journal. Le premier fonctionne bien comme variable, je pense que le changer en tant que chaîne n'est pas la solution nécessaire. Merci. – Pablo

0

Qu'est-ce qui se passe sur votre code est que youa en cours d'exécution loadTracks() avant que le code a assez de temps pour charger le numéro de journal. Deuxièmement, vous pouvez affecter le logNum à une variable locale qui peut ensuite être utilisée dans votre fonction loadTracks().

logNumLoader.load(new URLRequest("infoLogNum.txt")); 

//New local variable that will hold the logNum; 
var _logNum : String ; 

function loadedLogNum(e:Event):void { 

trace(e.target.data.logNum); // HOW TO GET THE VALUE OF logNum... *(see below) 
// Once infoLogNum is loaded, you can assign the value to the local variable   
_logNum = e.target.data.logNum; 
// Now you can load your tracks. 
loadTracks(); 
    } 

//Down in your loadTracks you can use the local logNum. 
function loadTracks():void { 
    tracksLoader.load(new URLRequest(_logNum+".log")); // (*) ...AND SET THE logNum VALUE HERE 
} 
+0

Si vous voulez approfondir votre script, vous pouvez éditer votre application pour qu'elle prenne les paramètres de la barre d'adresse. http://www.helmutgranda.com/?logNum=12345 Vous pouvez désormais lire de manière dynamique les journaux sans avoir à modifier un fichier texte et vous pouvez même envoyer l'adresse à d'autres personnes. –

+0

une autre chose que j'ai oublié de commenter est qu'en fait vous pouvez passer le paramètre pour charger les pistes. Après l'événement loadedLogNum, vous pouvez effectuer les opérations suivantes: loadTracks (e.target.data.logNum); // c'est sale mais juste pour prouver le point dans loadTracks. function loadTracks (_logNum: String): void { tracksLoader.load (nouvelle demande d'URL (_logNum + ".log")); // (*) ... ET RÉGLER LA VALEUR logNUM ICI } –

+0

Merci beaucoup, ça a marché !! A propos de la prise des paramètres de la barre d'adresse, ce script charge le fichier .log à partir d'une autre application (c'est pour une utilisation locale), donc je pense que cette option n'est pas nécessaire. Merci encore! – Pablo