Возвращать значения при использовании Delegate с sendAndLoad в файле класса AS2 - PullRequest
1 голос
/ 28 марта 2012

У меня есть Flash-анимация с кодом AS2, который вызывает sendAndLoad в отдельном файле класса, и следуя инструкциям в Интернете, я использовал Delegate для обработки части onLoad, например:

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{
}
}

I 'У нас есть две проблемы:

  1. Поскольку я вызываю myFunction () из моего файла .fla, как я могу отправить результат onLoad () обратно как возвращаемое значение myFunction ()?

  2. Как обратиться к переменным, которые были созданы внутри myFunction изнутри onLoad?

  3. В моем FLA-файле у меня есть такой код:

    myVar: String = myFunction ();

Если onLoad занимает какое-то время, я думаю, что myFunction () ничего не возвращает, и myVar в конечном итоге не определено.Как заставить fla ждать завершения onLoad в файле класса и затем заполнять myVar результатом?

Большое спасибо заранее за любые советы

1 Ответ

0 голосов
/ 26 августа 2012

Ваш класс может быть реструктурирован, чтобы отвечать на ваши вопросы.

Разделить конструктор, функцию загрузки и результат операции. Когда загрузка готова, класс может отправить событие. Ваш 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)
}
...