如何从windowSWF到JSFL传递一个对象?
-
22-07-2019 - |
题
我正在与一个FLA,作为一个文件(文档类),和一个JSFL文件工作。瑞士法郎在WindowSWF文件夹中生成(例如$闪蒸/ WindowSWF)
我有一个简单windowSWF和我使用MMExecute和fl.runScript通过从AS3变量JSFL。我没想到我会遇到麻烦,如果我想虽然使用的对象。
在我windowSWF我称之为一个DataGrid的 settingsGrid 的有以下栏目: [ “前缀”, “后缀”, “类型”] 和我特林传 settingsGrid.dataProvider.toArray()到JSFL脚本。
问题是它出来在另一侧上为未定义。我如何能围绕得到任何提示?
短的版本:如何传递像{前缀:“值”,后缀:“值”,类型:“值”}对象数组从ActionScript来JSFL。通过单个对象的工作原理,当我传递数组我得到一个错误:
"Syntax Error: missing ] after element list"
我的函数调用看起来是这样的:
MMExecute('fl.runScript(fl.configURI + "Commands/LazyGen.jsfl","generate","_",'+ settingsGrid.dataProvider.toArray() +');');
和在JSFL文件的方法中的签名看起来像这样:
function generate(prefixArg,settingsArg){}
解决方案
我是从一个数据网格,以JSFL经过的物体。该对象具有以下属性: 键,替换和型。这里是我使用来构造字符串我可以JSFL通过从动作的功能:
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;
}
我注意到在SWF设置不会奇迹般地保存不知何故,所以我用本地共享对象存储从数据提供程序的设置。我想我可能只是写了使用FLfile一个文件,但我不想让数组转换为字符串和背部。我正在写一个dataProvider中的数组(dataProvider.toArray())为ByteArray,我只是读回推在进入一个新的DataProvider的构造,当我需要它。
其他提示
只要你windowsSWF里面工作了你的变量值,并通过MMExecute命令传递变量到JSFL。
下列命令设置在工具栏到黑色填充颜色。因此,例如,该颜色的值可以从一个颜色选择器部件被抓取,然后传递到JSFL。所有我做的是从串联动作脚本变量成经由MMExecute发送的字符串。
var myColor:String = "#000000";
MMExecute("var fill = fl.getDocumentDOM().getCustomFill(\"toolbar\");fill.style= \"solid\";fill.color = \'"+myColor+"\';fl.getDocumentDOM().setCustomFill( fill );");