AS3,将外部变量传递给函数

时间:2010-08-04 17:36:15

标签: flash actionscript-3

我有一个外部日志文件,其名称会更改每个会话,格式为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”。

但是我需要在另一个加载和打开XXXXX.log的函数中传递这个“logNum”值(参见底部的代码):

...

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。

我不知道如何让它发挥作用。有什么想法吗?

TIA。

2 个答案:

答案 0 :(得分:0)

也许是这样的:

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

答案 1 :(得分:0)

您的代码上发生的事情是您在代码有足够的时间加载日志编号之前重新运行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 
}