Pregunta

Estoy tratando de crear un swfpanel para flash cs5.5 usando JSFL. Creé mi interfaz en Flash e intenté comunicarme con un comando JSFL. Entonces, en mi archivo .fla, utilizo una interfaz externa con devolución de llamada para llamar a una función específica en JSFL, y luego swfpanel.call () para la devolución. El problema que encuentro es que no puedo pasar una matriz como argumento para la función de llamada (después del nombre de la función AS3). Aquí está el código:

En 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 + "\");");
}

En 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");
    }
}

Al llamar panel.call ("CallbackPanel", resultado [0], resultado [1]); No hay problema, mi devolución de llamada se llama bien, pero cuando se usa panel.call ("CallbackPanel", resultado); Tengo un error:La ou les erreurs javascript SUIVANTES SE SONT Produites Lors de l'ExiCution de AirMobileFramework: la ou les erreur (s) javascript suivantes se sont produites:

Alguna idea ??

¿Fue útil?

Solución

Supongo que es porque JSFL no puede analizar una matriz. En el ejemplo que da, con el resultado [0], el resultado [1] tiene valores separados (probablemente se esfuerza o números), y eso no debería dar ningún problema.

Lo que haría es esto:

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

y en la función AS3 simplemente arg.split ("@*$")

Si su entrada podría tener la cadena "@*$", entonces simplemente podría hacer una llamada al SWF para cada elemento en el resultado, y cuando haya terminado con el bucle allí, dígale al SWF que recopile las cosas, como esta :

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");
    }
}

Y luego en AS3:

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

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

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

Otros consejos

Esto es lo que necesita para pasar matrices de un lado a otro de JSFL: http://exanimo.com/actionscript/jsflinterface/

Y vale la pena ver esto también, una vez que se lanza en una semana más o menos: http://www.xjsfl.com

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top