Frage

Ich arbeite mit einem fla, eine als Datei (Dokumentenklasse) und eine JSFL-Datei. die swf ist im WindowSWF Ordner (zum Beispiel $ flash / WindowSWF)

erzeugt

Ich habe eine einfache WindowSWF und ich bin mit MMExecute und fl.runScript Variablen von AS3 passieren JSFL. Ich habe nicht vorstellen, ich würde in Schwierigkeiten geraten, wenn ich Objekte verwenden, obwohl würde.

In meinem WindowSWF habe ich ein Datagrid genannt settingsGrid mit den folgenden Spalten: [ "Präfix", "Index", "Typ"] und ich bin Tring passieren settingsGrid.dataProvider.toArray () zum JSFL Skript.

Das Problem ist, es kommt wie auf der anderen Seite nicht definiert. Irgendwelche Hinweise, wie ich mich um das zu bekommen?

Die kurze Version: Wie kann ich ein Array von Objekten wie {prefix: "Wert", Suffix: "Wert", Typ: "Wert"} Pass von Actionscript JSFL. einzelne Objekte Passing funktioniert, ich erhalte eine Fehlermeldung, wenn ich ein Array übergeben:

"Syntax Error: missing ] after element list"

Meine Funktionsaufruf sieht wie folgt aus:

MMExecute('fl.runScript(fl.configURI + "Commands/LazyGen.jsfl","generate","_",'+ settingsGrid.dataProvider.toArray() +');');

und die Signatur für das Verfahren in der JSFL-Datei sieht wie folgt aus:

function generate(prefixArg,settingsArg){}
War es hilfreich?

Lösung

Ich bin vorbei Objekte von einem Datenraster zu JSFL. Die Objekte haben die folgenden Eigenschaften: Taste Ersatz und type . Hier ist die Funktion, die ich verwendet habe, um eine Zeichenfolge zu konstruieren ich in JSFL von Actionscript passieren könnte:

private function dataProviderToString(dataProvider:DataProvider):String{
            var settingsString:String = '[';
            for(var i:int = 0 ; i < dataProvider.length ; i++){
                if(i < (dataProvider.length-1)) settingsString += '{key:"'+ dataProvider.getItemAt(i).key + '",replacement:"' + dataProvider.getItemAt(i).replacement + '",type:"'+ dataProvider.getItemAt(i).type + '"},';
                else settingsString += '{key:"'+ dataProvider.getItemAt(i).key + '",replacement:"' + dataProvider.getItemAt(i).replacement + '",type:"'+ dataProvider.getItemAt(i).type + '"}';
            }
            settingsString += ']';
            return settingsString;
        }

Ich habe bemerkt, Einstellungen in der SWF waren irgendwie nicht auf magische Weise gespeichert, so habe ich lokale Shared die Einstellungen aus dem Datenprovider zu speichern. Ich glaube, ich hätte nur eine Datei geschrieben FLfile, aber ich wollte nicht halten Arrays in Strings und zurück zu konvertieren. Ich schreibe ein Dataprovider des Arrays (dataProvider.toArray ()) in ein ByteArray, die ich gerade gelesen, zurück und schieben in in den Konstruktor eines neuen Data Provider, wenn ich es brauche.

Andere Tipps

Just auszuarbeiten, um Ihre Variablen Wert in Ihrem windowsSWF und die Variablen in JSFL über den MMExecute Befehl übergeben.

Der folgende Befehl legt die Füllfarbe in der Symbolleiste auf schwarz. So könnte zum Beispiel des Wert der Farbe aus einer Farbauswahl Komponente gepackt wird und dann JSFL weitergegeben. Alles, was ich tun, ist die Variable aus Action Script in die Zeichenfolge verketten, die über MMExecute gesendet wird.

var myColor:String = "#000000";
MMExecute("var fill = fl.getDocumentDOM().getCustomFill(\"toolbar\");fill.style= \"solid\";fill.color = \'"+myColor+"\';fl.getDocumentDOM().setCustomFill( fill );");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top