好吧,我想我最好先問問別人,然後再開始撕掉我的頭髮。我一直在從一個XML文件加載數據,並且這個想法是,如果loadDetails在加載xml後被調用,它會在這個基礎上加載它們,如果它被調用之後它會設置一個標誌來告訴對象當xml完成時自動再次調用它。很簡單,對吧?AS3:在一個函數中設置的變量在另一個函數中具有不同的值
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。但是,當實際解析aml中的xml時,它會將mAutoload查詢爲false,並且無法自動加載 - 並且,不,它不會在另一個函數中被設置爲false,而是其他函數將mAutoload設置爲false是構造函數。
我真的很困惑和沮喪。我想我願意接受這只是AS3的荒謬,願意就如何繞過這個問題提出建議,但現在我只是非常沮喪。任何反饋意見。
我認爲這將有助於看到更多的代碼。特別是,什麼使「自動加載0」線?我注意到,在loadDetails中,如果細節已準備就做的第一件事是將mAutoload設置爲false。我猜「自動加載」行顯示你正確地通過了loadDetails。如果將它設置爲false,那麼會使'parseXML爲false'行適當的響應。 – 2013-02-15 15:14:53
這裏沒有看到整個圖片。 mAutoload和mDetailsReady變量在哪裏被聲明?這是你正在實例化的類還是文檔代碼?你是在課堂外部還是內部查詢這些變量? – Atriace 2013-02-15 15:16:55
哎呀抱歉,我刪除了'自動加載'行,當我切出'做東西'行。我重新編輯它,但它只是緊跟在條件塊之後的一條跟蹤語句。這可以解釋它,但a)情況並非如此,b)它無法解釋爲什麼它適用於0級。 mAutoload和mDetailsReady都是私有成員變量,並且完全按照您在此處看到的方式使用:唯一的其他用法是初始化爲false。 – 2013-02-15 18:36:19