Domanda

Sto lavorando con un fla, un file as (classe documento) e un file jsfl. swf viene generato nella cartella WindowSWF (ad esempio $ flash / WindowSWF)

Ho un semplice windowSWF e sto usando MMExecute e fl.runScript per passare variabili da as3 a jsfl. Non immaginavo che avrei avuto problemi se avessi usato degli oggetti.

Nella mia finestraSWF ho un DataGrid chiamato settingsGrid con le seguenti colonne: [& Quot; prefisso " " suffisso " " tipo "] e sto cercando di passare settingsGrid.dataProvider.toArray () allo script jsfl.

Il problema è che non è definito dall'altra parte. Qualche suggerimento su come posso evitarlo?

La versione breve: Come posso passare un array di oggetti come {prefisso: "valore", suffisso: "valore", tipo: "valore" da actioncript a jsfl. Passando i singoli oggetti funziona, ho un errore quando passo un array:

"Syntax Error: missing ] after element list"

La mia chiamata di funzione è simile al seguente:

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

e la firma per il metodo nel file jsfl è simile alla seguente:

function generate(prefixArg,settingsArg){}
È stato utile?

Soluzione

Sto passando oggetti da una griglia dati a JSFL. Gli oggetti hanno le seguenti proprietà: chiave , sostituzione e tipo . Ecco la funzione che ho usato per costruire una stringa che potrei passare in JSFL da ActionScript:

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

Ho notato che le impostazioni nel file SWF non sono state in qualche modo magicamente salvate, quindi ho usato SharedObject locale per memorizzare le impostazioni dal dataProvider. Immagino che avrei potuto semplicemente scrivere un file usando FLfile, ma non volevo continuare a convertire array in stringhe e viceversa. Sto scrivendo un array di dataProvider (dataProvider.toArray ()) su un ByteArray che ho appena letto e inserito nel costruttore di un nuovo DataProvider quando ne ho bisogno.

Altri suggerimenti

Basta calcolare il valore delle variabili all'interno di windowsSWF e passare le variabili in JSFL tramite il comando MMExecute.

Il seguente comando imposta il colore di riempimento nella barra degli strumenti su nero. Quindi, ad esempio, il valore del colore potrebbe essere acquisito da un componente selettore colore e quindi passato a jsfl. Tutto quello che faccio è concatenare la variabile dallo script di azione nella stringa inviata tramite MMExecute.

var myColor:String = "#000000";
MMExecute("var fill = fl.getDocumentDOM().getCustomFill(\"toolbar\");fill.style= \"solid\";fill.color = \'"+myColor+"\';fl.getDocumentDOM().setCustomFill( fill );");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top