好吧我觉得在开始撕掉头发之前我最好问别人。我一直在从xml文件加载数据,并且想法是如果在加载xml之后调用loadDetails将在此基础上加载它们并且如果它被调用之前它将设置一个标志来告诉对象xml完成后自动再次调用它。简单,对吧?
private function parseXML(e:Event):void
{
trace("parseXML " + mLevelID.toString(16) + " " + mAutoload);
var xml:XML = new XML(e.target.data);
// do stuff...
System.disposeXML(xml);
mDetailsReady = true;
if (mAutoload)
loadDetails();
}
private function cancelXML(e:Event):void
{
trace("cancelXML " + mLevelID.toString(16));
mAutoload = false;
}
public function loadDetails():void
{
if (!mDetailsReady)
{
if (!mAutoload)
trace("autoload on " + mLevelID.toString(16));
mAutoload = true;
return;
}
if (mAutoload) trace("autoloaded " + mLevelID.toString(16));
// do stuff...
mAutoload = false;
}
这是问题所在。即使在正确设置了标志之后,它也没有调用loadDetails ......或者总是如此。这是一些示例输出:
autoload on 0
autoload on a
autoload on 1
cancelXML 1
parseXML 0 true
autoloaded 0
parseXML a false
如您所见,它跟踪设置所有三个级别的mAutoload。然而,当实际解析级别a中的xml时,它会将mAutoload视为false并且无法自动加载 - 并且,不,它不会在另一个函数中被设置为false,同时,只有其他函数,将mAutoload设置为false是构造函数。
我真的很困惑和沮丧。我想我愿意接受这只是AS3很荒谬,并且愿意接受关于如何绕过这个问题的建议,但是现在我只是非常沮丧。任何反馈都表示赞赏。
答案 0 :(得分:0)
你的逻辑关闭
在方法parseXML中
mDetailsReady = true;
if (mAutoload)
loadDetails();
表示mAutoload为true且mDetailsReady为true
但在loadDetails方法中
if (!mDetailsReady)
{
if (!mAutoload)
我,不确定你要用这个类实现什么,但如果你正在编写某种xml加载器类,你可能想要使用更多的Loader类变量来确定它是否已完成加载而不是你跟踪你自己。