2012-03-28 20 views
1

我有一個帶有AS2代碼的Flash動畫,它在一個單獨的類文件中調用sendAndLoad,並且遵循在線指南我已經使用委託來處理onLoad部分,就像這樣:在AS2類文件中使用帶有sendAndLoad的Delegate時的返回值

ActionScript Code in class: 
function myFunction():String{ 
... 
var send_lv:LoadVars = new LoadVars(); 
var saveresult_lv:LoadVars = new LoadVars(); 
send_lv.dataString = rc4_hash;  send_lv.sendAndLoad("<my url>",saveresult_lv,"POST"); 
saveresult_lv.onLoad = Delegate.create(this, onLoad); 
} 

function onLoad (success:Boolean) { 
if (success) { 
}else{ 
} 
} 

我有兩個問題:

  1. 因爲我從我的FLA文件調用myFunction的(),我怎麼送的onLoad(的結果)作爲後面的返回值myFunction的()?

  2. 我該如何參考onLoad中myFunction內創建的變量?

  3. 在我的FLA文件,我有這樣的代碼:

    myVar的:字符串= myFunction的();

如果onLoad需要任何時間,那麼我認爲myFunction()沒有返回任何內容,myVar最終未定義。如何讓fla等待類文件中的onLoad完成,然後用結果填充myVar?

非常感謝您的任何提示

+0

'onLoad'將永遠不會被立即調用,但是當接收到的數據(即使需要1毫秒)。您將一直需要等待並繼續使用onLoad方法的應用程序。 – Marty 2012-03-28 01:23:21

回答

0

您的課堂可以重組來回答你的問題。

分離構造函數,加載函數和結果操作。當負載準備就緒時,該類可以派發一個事件。你的FLA可以聽這個事件。

// Class code should something like this: (my AS2 is a little rusty) 
class Sender { 
    private var classSavedData:String; 
    // these three vars are needed to use EventDispatcher. 
    public var addEventListener:Function; 
    public var removeEventListener:Function; 
    public var dispatchEvent:Function; 


    // Make your class ready to send events 
    public function Sender() { 
     EventDispatcher.initialize(this);   
    } 
    public function loadData(){ 
     classSavedData = "Something the FLA can pick up after loading"; 
     var send_lv:LoadVars = new LoadVars(); 
     var saveresult_lv:LoadVars = new LoadVars(); 
     send_lv.dataString = rc4_hash;  
     end_lv.sendAndLoad("<my url>",saveresult_lv,"POST"); 
     saveresult_lv.onLoad = Delegate.create(this, onLoad); 
    } 
    private function onLoad():Void { 
     dispatchEvent({target:this, type:"eventFired", loadAnswer: saveresult_lv , extraData:classSavedData});   
    } 
} 

...和代碼在FLA可以是這樣的:

var myClassInstance:Sender = new Sender() 
myClassInstance.addEventListener ("eventFired", Delegate.create (this, onDataLoaded)) 
myClassInstance.loadData() 
function onDataLoaded(evt:Object){ 
    trace ("loaded loadvars "+evt.loadAnswer) 
} 
相關問題