Domanda

Sto cercando di creare uno SWFPanel per Flash CS5.5 usando JSFL. Ho creato la mia interfaccia in Flash e ho provato a comunicare con un comando JSFL. Quindi, nel mio file .fla, utilizzo un'interfaccia esterna con callback per chiamare una funzione specifica in JSFL, quindi swfpanel.call () per il ritorno. Il problema che incontro è che non posso passare un array come argomento per la funzione di chiamata (dopo il nome della funzione AS3). Ecco il codice:

In AS3:

function init():void{
    ExternalInterface.addCallback("callBackPanel", JsflCallback);
    MMExecute("fl.runScript( fl.configURI + \"AirMobileFramework/AirMobileFrameworkPanel.jsfl\", \"checkSettings\" );");
}

function JsflCallback(... args):void{
    jsTrace("callback");
}

function jsTrace(str:String):void{
    MMExecute("fl.trace(\"" + str + "\");");
}

In JSFL:

function checkSettings(){   
    var fileSettingsUrl = fl.configURI + "AirMobileFramework/settings.fwk";
    var exist = FLfile.exists(fileSettingsUrl);
    var result = new Array("settings", exist);

    if(!exist){
        FLfile.write(fileSettingsUrl, "");
    } else {
        result.push(FLfile.read(fileSettingsUrl));
    }

    callPanelBack(result);
}

function callPanelBack(result){
    fl.trace("result: " + result.length + " > " + typeof result + " >> " + result[0]);
    var panel;
    if(fl.swfPanels.length > 0){ 
        for(x = 0; x < fl.swfPanels.length; x++){
            if(fl.swfPanels[x].name == "AirMobileFramework"){ 
                panel = fl.swfPanels[x];
                panel.call("callBackPanel", result); 
                break; 
            } 
        }
    } else {
        fl.trace("No existing panel");
    }
}

Quando si chiama Panel.Call ("CallbackPanel", risultato [0], risultato [1]); Non ci sono problemi, il mio callback è ben chiamato, ma quando usa panel.call ("callbackpanel", risultato); Ho un errore:La ou les erreurs javascript suvans se sont producuites lors de l'exécution de airmobileframework: la ou les erreur (s) javascript suvans se sont producuites:

Qualche idea ??

È stato utile?

Soluzione

Immagino che sia perché JSFL non può analizzare un array. Nell'esempio che dai, con il risultato [0], il risultato [1] hai valori separati (probabilmente strumini o numeri) e ciò non dovrebbe dare alcun problema.

Quello che farei è questo:

panel.call("callBackPanel", result.join("@*$");

e nella funzione AS3 semplicemente arg.split ("@*$")

Se il tuo input potrebbe avere la stringa "@*$", allora potresti semplicemente effettuare una chiamata al SWF per ogni elemento in risultato e quando hai finito con il loop lì, dì alla SWF di raccogliere le cose - in questo modo :

function callPanelBack(result){
    fl.trace("result: " + result.length + " > " + typeof result + " >> " + result[0]);
    var panel;
    if(fl.swfPanels.length > 0){ 
        for(x = 0; x < fl.swfPanels.length; x++){
            if(fl.swfPanels[x].name == "AirMobileFramework"){ 
                panel = fl.swfPanels[x];
                panel.call("callBackPanelStart"); 
                for(var i=0; i < result.length; i++){
                    panel.call("callBackPanelArgument", result[i])
                }
                panel.call("callBackPanelEnd"); 
                break; 
            } 
        }
    } else {
        fl.trace("No existing panel");
    }
}

e poi in AS3:

function callBackPanelStart():void
{
    jsflArray = [];
}

function callBackPanelArgument(argument:*):void
{
    jsflArray.push(argument);
}

function callBackPanelEnd():void
{
    // execute whatever you must on the result
}

Altri suggerimenti

Questo è ciò di cui hai bisogno per passare array avanti e indietro da JSFL: http://exanimo.com/actionscript/jsflinterface/

E vale anche la pena guardarlo, una volta rilasciato in una settimana circa: http://www.xjsfl.com

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top