你在你的班上做什麼是幾乎沒有的,但有一些需要加以糾正的幾件事情:
首先,一類減速的頂層,你只允許內定義成員(屬性和方法)。目前,你這樣做,這是偉大的,但你也試圖在此範圍內運行一些實際的代碼,以及:
myLoader.load(new URLRequest("http://myWebsite/myFile.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
這將引發和錯誤,你的類將無法正常工作。要在創建類的實例時立即運行代碼,您需要使用constructor
,這是一個使用與其中聲明的類相同的名稱(區分大小寫)的函數。轉換到這一點的代碼看起來像這樣,在那裏你會發現我已經創建的構造和放置其內的罪魁禍首代碼:
public class XMLLoad
{
public var myXML:XML;
public var myLoader:URLLoader = new URLLoader();
// This is the constructor.
public function XMLLoad()
{
myLoader.load(new URLRequest("http://myWebsite/myFile.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
}
public function processXML(e:Event):void
{
myXML = new XML(e.target.data);
trace(myXML);
}
}
你現在所做的事,創建一個類XMLLoad
。使用new
關鍵字,您可以創建該類的實例。在你的情況,你只需要一個實例做你想做的,是這樣的:
var xmlLoad:XMLLoad = new XMLLoad();
這將創造XMLLoad
一個實例,並將其賦值給變量xmlLoad
,通過它你就可以訪問您在該類中定義的屬性和方法。我們上面創建的構造函數也會自動運行,這意味着你的類已經發起了一些XML的請求。
不幸的是,因爲對外部數據請求是異步(也就是說,它們在時間軸上這是你的應用的自然流動的不同進行),我們無法知道何時XML完全加載,我們能夠從課外使用它。但是什麼我們能做的就是改變XMLLoad
類一點點地幫助我們:
public class XMLLoad
{
public var myXML:XML;
public var myLoader:URLLoader = new URLLoader();
private var _callback:Function;
public function XMLLoad(callback:Function)
{
_callback = callback;
myLoader.load(new URLRequest("http://myWebsite/myFile.xml"));
myLoader.addEventListener(Event.COMPLETE, processXML);
}
public function processXML(e:Event):void
{
myXML = new XML(e.target.data);
_callback(myXML);
}
}
我們在這裏所做的是修改構造函數接受引用的函數,它應該接受的參數鍵入XML
。然後,我們修改了您的processXML
函數以執行回調並將收到的XML發送給它。這意味着,你現在可以這樣做:
var xmlLoad:XMLLoad = new XMLLoad(done);
function done(xml:XML):void
{
trace(xml);
}
這意味着你將能夠在done
功能,這將提供給您滿載XML內繼續您的應用程序。
太棒了!謝謝@marty。偉大的貢獻。我一直在努力。我將把所有的數據放入我的應用程序中。所以能夠在全球範圍內訪問它將使其更容易。此刻,我在XML Process函數中有其餘的編碼。我將打印出來並詳細介紹它。 – Stephen