1

我正在使用一个 fla、一个 as 文件(文档类)和一个 jsfl 文件。swf 在 WindowSWF 文件夹中生成(例如 $flash/WindowSWF)

我有一个简单的 windowSWF,我正在使用 MMExecute 和 fl.runScript 将变量从 as3 传递到 jsfl。我没想到如果我使用对象会遇到麻烦。

在我的 windowSWF 中,我有一个名为settingsGrid的 DataGrid ,其中包含以下列: ["prefix","suffix","type"] 并且我正在尝试将settingsGrid.dataProvider.toArray()传递给 jsfl 脚本。

问题是它在另一边是未定义的。关于我如何解决这个问题的任何提示?

简短的版本:如何将像 {prefix:"value",suffix:"value",type:"value"} 之类的对象数组从 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){}
4

2 回答 2

2

我将对象从数据网格传递到 JSFL。这些对象具有以下属性: keyreplacementtype。这是我用来构造字符串的函数,我可以从 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 的构造函数中。

于 2009-07-13T09:59:56.173 回答
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 );");
于 2010-07-02T21:40:14.613 回答