我正在努力弄清楚這一點。循環內部的AS3事件監聽器
我正在創建一個Air/Flash應用程序,用於將文件從本地目錄上傳到服務器(無需用戶交互)。 我正在創建文件夾中找到的文件的數組,並可以毫無問題地上傳它們。 但是,我無法跟蹤事件監聽器;意思是,for循環顯然在每次上傳的事件偵聽器之前完成。
有沒有辦法跟蹤事件監聽器並找出最後一個完成時間?
任何幫助是極大的讚賞...
這裏是我的代碼:
public var UPLOAD_URL:String = "http://myhost/dev/uptest.php";
upbtn.addEventListener(MouseEvent.CLICK, uploadme);
public function uploadme(event:MouseEvent):void
{
preloader.visible = true;
var desktop:File = File.applicationStorageDirectory.resolvePath("photo");
var files:Array = desktop.getDirectoryListing();
for (var i:uint = 0; i < files.length; i++)
{
var date:Date = new Date(); // get new date
var mytime:Number = Math.round(date.valueOf()/1000);
var ur:URLRequest = new URLRequest();
var uv:URLVariables = new URLVariables();
uv.filename = files[i].name;
ur.data = uv;
ur.method = URLRequestMethod.POST;
ur.url = UPLOAD_URL;
files[i].addEventListener(ProgressEvent.PROGRESS, updateProgress);
files[i].addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, doneUpload);
files[i].addEventListener(IOErrorEvent.IO_ERROR, fileError);
files[i].upload(ur);
//trace(i)
function updateProgress(event:ProgressEvent):void
{
//wait preloader.visible = true;
//trace(event.currentTarget.name);
}
function doneUpload(event:DataEvent):void
{
//var loader2: URLLoader = URLLoader(event.target);
//trace(i);
trace(event.data);
//preloader.visible = false;
}
function fileError(event:IOErrorEvent):void
{
trace("error");
}
}
}
你必須建立這種方式。你創建了足夠的加載器,並將它們鏈接到一個結構體,然後在'doneUpload'中監聽器轉到該結構體並將'event.target'標記爲結束,然後檢查結構體是否全部完成。 – Vesper
我不是100%清楚你在這裏要做什麼。你想保持UI處於「等待」狀態,直到所有文件都被上傳了嗎?一旦完成上傳,爲每個文件做一些特定的事情?還有別的嗎? – Brian
我想要做的就是在上傳完成時顯示預加載器,並在最後一個文件上傳時禁用它。 – cnapsys