【发布时间】:2016-09-26 01:47:58
【问题描述】:
我在理解为什么在从另一个函数中调用一个函数时某些事件不会触发时遇到了一些问题。
这是发生了什么,我不知道为什么:
当应用程序存储目录中没有 test.xml 文件时,writecamfile() 会执行,但似乎 oncomplete() 函数永远不会触发。预加载器仍然可见,并且跟踪不起作用。
如果文件存在,readcamfile() 会正常触发,oncomplete 会隐藏预加载器并返回跟踪。
我的问题是为什么没有 test.xml 文件时 oncomplete() 不触发? 我的逻辑是检查文件是否不存在,创建它然后读取它。
非常感谢任何指针。 提前感谢您,祝您有美好的一天!
托尼
package util
{
import flash.filesystem.*;
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.*;
import flash.display.*;
import flash.events.Event;
import flash.events.MediaEvent;
import flash.events.MouseEvent;
import flash.media.CameraUI;
import flash.media.MediaPromise;
import flash.media.MediaType;
import fl.containers.*;
import fl.controls.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequestMethod;
dynamic public class cam5 extends MovieClip
{
public var preloader:MovieClip;
public function cam5()
{
var tmp_file:File = File.applicationStorageDirectory.resolvePath('test.xml');
if (tmp_file.exists)
{// File exists
preloader.visible = true;
readcamfile(null); // check settings from the camera file
} else
{// File doesn't exist
writecamfile();
preloader.visible = true;
}
function readcamfile(event:Event):void
{
var loader:URLLoader = new URLLoader(new URLRequest(File.applicationStorageDirectory.resolvePath('test.xml').url));
loader.addEventListener(Event.COMPLETE, oncomplete);
}
function writecamfile():void
{
var xmlstr:XML = <images></images>;
var file:File = File.applicationStorageDirectory.resolvePath("test.xml");
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.WRITE);
var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n';
outputString += xmlstr.toXMLString();
fileStream.writeUTFBytes(outputString);
fileStream.addEventListener(Event.COMPLETE, readcamfile);
fileStream.close();
}
function oncomplete(event:Event):void
{
var xml:XML = new XML(event.currentTarget.data);
var chkcount : Boolean = (xml.children().length() > 0);
if(chkcount)
{
var xmlcount:int = xml.children().length(); //test children count
var camXMLList:XMLList = xml.img;
var count:int = camXMLList.length(); //test list count
for(var i:int=0; i<xmlcount; i++)
{
var _row = xml.children()[i];
}
preloader.visible = false;
trace(_row.text()+'\n'+xmlcount+'\n'+count);
}else
{
preloader.visible = false;
trace("no images");
}
}
}
}
}
【问题讨论】:
标签: actionscript-3 events actionscript air