好吧,我想我最好在开始扯头发之前先问问别人。我一直在从 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 的荒谬,并愿意接受有关如何绕过问题的建议,但现在我只是非常沮丧。任何反馈表示赞赏。