Pregunta

Estoy trabajando con un fla, un archivo as (clase de documento) y un archivo jsfl. el swf se genera en la carpeta WindowSWF (por ejemplo, $ flash / WindowSWF)

Tengo una ventana simple SWF y estoy usando MMExecute y fl.runScript para pasar variables de as3 a jsfl. Sin embargo, no imaginé que tendría problemas si usara objetos.

En mi ventana SWF tengo un DataGrid llamado settingsGrid con las siguientes columnas: [" prefijo ", " sufijo ", " tipo "] y estoy tratando de pasar settingsGrid.dataProvider.toArray () al script jsfl.

El problema es que aparece como indefinido en el otro lado. ¿Alguna pista sobre cómo puedo evitar eso?

La versión corta: ¿Cómo puedo pasar una matriz de objetos como {prefijo: " value ", sufijo: " value ", escriba: " value "} desde actionscript a jsfl. Pasar objetos individuales funciona, obtengo un error cuando paso una matriz:

"Syntax Error: missing ] after element list"

Mi llamada a la función se ve así:

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

y la firma del método en el archivo jsfl se ve así:

function generate(prefixArg,settingsArg){}
¿Fue útil?

Solución

Estoy pasando objetos de una cuadrícula de datos a JSFL. Los objetos tienen las siguientes propiedades: clave , reemplazo y tipo . Aquí está la función que he usado para construir una cadena que podría pasar en JSFL desde 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;
        }

Noté que las configuraciones en el SWF no se guardaban mágicamente de alguna manera, por lo que utilicé SharedObject local para almacenar las configuraciones desde el proveedor de datos. Supongo que podría haber escrito un archivo usando FLfile, pero no quería seguir convirtiendo matrices en cadenas y viceversa. Estoy escribiendo una matriz de dataProvider (dataProvider.toArray ()) en un ByteArray que acabo de leer y meter en el constructor de un nuevo DataProvider cuando lo necesito.

Otros consejos

Simplemente calcule el valor de sus variables dentro de su windowsSWF y pase las variables a JSFL a través del comando MMExecute.

El siguiente comando establece el color de relleno en la barra de herramientas en negro. Entonces, por ejemplo, el valor del color podría tomarse de un componente selector de color y luego pasar a jsfl. Todo lo que hago es concatenar la variable del script de acción en la cadena que se envía a través de MMExecute.

var myColor:String = "#000000";
MMExecute("var fill = fl.getDocumentDOM().getCustomFill(\"toolbar\");fill.style= \"solid\";fill.color = \'"+myColor+"\';fl.getDocumentDOM().setCustomFill( fill );");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top