我正在处理fla,文件类(文档类)和jsfl文件。 swf在WindowSWF文件夹中生成(例如$ flash / WindowSWF)
我有一个简单的windowSWF,我正在使用MMExecute和fl.runScript将变量从as3传递给jsfl。我不认为如果我会使用物体,我会遇到麻烦。
在我的windowSWF中,我有一个名为 settingsGrid 的DataGrid,其中包含以下列: [ “前缀”, “后缀”, “类型”] 我想把 settingsGrid.dataProvider.toArray()传递给jsfl脚本。
问题是它在另一方面是未定义的。关于如何解决这个问题的任何提示?
简短版本:如何从actionscript到jsfl传递像{prefix:“value”,suffix:“value”,type:“value”}这样的对象数组。传递单个对象有效,当我传递数组时出错:
"Syntax Error: missing ] after element list"
我的函数调用如下所示:
MMExecute('fl.runScript(fl.configURI + "Commands/LazyGen.jsfl","generate","_",'+ settingsGrid.dataProvider.toArray() +');');
并且jsfl文件中方法的签名如下所示:
function generate(prefixArg,settingsArg){}
答案 0 :(得分:2)
我将对象从数据网格传递给JSFL。对象具有以下属性: 密钥,替换和类型。这是我用来构造一个我可以通过actionscript传递给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中的设置没有以某种方式神奇地保存,因此我使用本地SharedObject来存储dataProvider中的设置。我想我可以用FLfile编写一个文件,但我不想继续将数组转换为字符串并返回。我正在将一个dataProvider的数组(dataProvider.toArray())写入ByteArray,我刚刚读回来并在需要时将其推入新DataProvider的构造函数中。
答案 1 :(得分:1)
只需在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 );");