AS3, передать внешнюю переменную в функцию - PullRequest
0 голосов
/ 04 августа 2010

У меня есть внешний файл журнала, имя которого меняется каждый сеанс в формате XXXXX.log

Мне нужно загрузить его внутри SWF-файла, чтобы показать его данные, но каждый раз, когда имя журнала отличается, мне нужно открыть .fla, изменить имя файла и затем повторно опубликовать SWF.

Итак, я сделал простой скрипт для загрузки другого .txt, чтобы вручную ввести в него номер 5 имени журнала и загрузить его внутри 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)

        }

"infoLogNum.txt" содержит только переменную, которая представляет собой имя .log, введенное вручную, например:

logNum=12345

Этот скрипт отлично работает, так как выводит значение переменной, в данном случае «12345».

Но мне нужно, чтобы это значение "logNum" было передано в другую функцию, которая загружает и открывает XXXXX.log (см. Код внизу):

...

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 
}

Хотя я не могу присвоить значение logNum последней функции, файл .log открыть нельзя.

Понятия не имею, как заставить это работать. Есть идеи, пожалуйста?

ТИА.

Ответы [ 2 ]

0 голосов
/ 06 августа 2010

Что происходит с вашим кодом, так это то, что вы запускаете loadTracks () до того, как у кода будет достаточно времени для загрузки номера журнала.Во-вторых, вы можете присвоить logNum локальной переменной, которая затем может быть использована в вашей функции 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 голосов
/ 04 августа 2010

Возможно что-то вроде этого:

function loadedLogNum(e:Event):void {
  var logNum:String = e.target.data.split("=")[1]; // returns "12345"
  tracksLoader.load(new URLRequest(logNum + ".log"));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...