Вопрос

Я пытаюсь создать SWFPanel для Flash CS5.5 с помощью JSFL. Я создал свой интерфейс во вспышке и пытаюсь общаться с командой JSFL. Итак, в моем файле .fla я использую ExternalInterface с обратным вызовом, чтобы вызвать определенную функцию в JSFL, а затем SWFPanel.call () для возврата. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу передать массив в качестве аргумента для функции вызова (после имени функции AS3). Вот код:

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

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

При звонке panel.call ("callbackpanel", результат [0], результат [1]); нет проблем, мой обратный вызов хорошо называется, но при использовании panel.call ("callbackpanel", результат); У меня ошибка:Les Les Erreurs JavaScript Suivantes Se Sont Wreatutes Lors de L'EseCution de AirmobileFramework: La Les Erreur (ы) Javascript suivantes se sont wreaduites:

Есть идеи ??

Это было полезно?

Решение

Я предполагаю, что это потому, что JSFL не может проанализировать массив. В примере, который вы даете, с результатом [0], результат [1] у вас есть отдельные значения (вероятно, удар или числа), и это не должно дать проблем.

Я бы сделал это:

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

и в функции AS3 просто Arg.split ("@*$")

Если ваш ввод может иметь строку «@*$», то вы можете просто позвонить в SWF для каждого элемента в результате, и когда вы закончите с петлей, скажите SWF, чтобы собрать вещи - как это :

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

а затем в AS3:

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

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

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

Другие советы

Это то, что вам нужно, чтобы пройти массивы туда -сюда из JSFL: http://exanimo.com/actionscript/jsflinterface/

И стоит посмотреть на это, как только он будет выпущен через неделю или около того: http://www.xjsfl.com

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top