I'm working with an fla, an as file(document class), and a jsfl file. the swf is generated in the WindowSWF folder (e.g. $flash/WindowSWF)
I have a simple windowSWF and I'm using MMExecute and fl.runScript to pass variables from as3 to jsfl. I didn't imagine I would run into trouble if I would use objects though.
In my windowSWF I have a DataGrid called settingsGrid with the following columns: ["prefix","suffix","type"] and I'm tring to pass settingsGrid.dataProvider.toArray() to the jsfl script.
The problem is it comes out as undefined on the other side. Any hints on how I can get around that ?
The short version: How can I pass an array of objects like {prefix:"value",suffix:"value",type:"value"} from actionscript to jsfl. Passing single objects works, I get an error when I pass an array:
"Syntax Error: missing ] after element list"
My function call looks like this:
MMExecute('fl.runScript(fl.configURI + "Commands/LazyGen.jsfl","generate","_",'+ settingsGrid.dataProvider.toArray() +');');
and the signature for the method in the jsfl file looks like this:
function generate(prefixArg,settingsArg){}
I'm passing objects from a Data Grid to JSFL. The objects have the following properties: key, replacement and type. Here is the function I've used to construct a string I could pass in JSFL from 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;
}
I noticed settings in the SWF weren't magically saved somehow, so I used local SharedObject to store the settings from the dataProvider. I guess I could have just wrote a file using FLfile, but I didn't want to keep converting arrays to strings and back. I'm writing a the dataProvider's array ( dataProvider.toArray() ) to a ByteArray that I just read back and shove in into the constructor of a new DataProvider when I need it.