Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 如何将对象从windowSWF传递到JSFL?_Flash_Actionscript 3_Object_Jsfl - Fatal编程技术网

Flash 如何将对象从windowSWF传递到JSFL?

Flash 如何将对象从windowSWF传递到JSFL?,flash,actionscript-3,object,jsfl,Flash,Actionscript 3,Object,Jsfl,我正在使用fla、as文件(文档类)和jsfl文件。swf在WindowSWF文件夹中生成(例如$flash/WindowSWF) 我有一个简单的windowSWF,我使用MMExecute和fl.runScript将变量从as3传递到jsfl。不过,我没想到如果我使用对象,我会遇到麻烦 在我的windowSWF中,我有一个名为settingsGrid的数据网格,包含以下列: [“前缀”、“后缀”、“类型”] 我试图将setingsgrid.dataProvider.toArray()传递给js

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

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

在我的windowSWF中,我有一个名为settingsGrid的数据网格,包含以下列: [“前缀”、“后缀”、“类型”] 我试图将setingsgrid.dataProvider.toArray()传递给jsfl脚本

问题是它在另一方面是未定义的。有没有关于我如何避开这个问题的提示

简短版本:如何将{前缀:“value”、后缀:“value”、类型:“value”}等对象数组从actionscript传递到jsfl。传递单个对象有效,传递数组时会出现错误:

"Syntax Error: missing ] after element list"
我的函数调用如下所示:

MMExecute('fl.runScript(fl.configURI + "Commands/LazyGen.jsfl","generate","_",'+ settingsGrid.dataProvider.toArray() +');');
function generate(prefixArg,settingsArg){}
jsfl文件中方法的签名如下所示:

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

我将对象从数据网格传递到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;
        }
专用函数dataProviderToString(dataProvider:dataProvider):字符串{
变量设置字符串:字符串='[';
for(变量i:int=0;i

我注意到SWF中的设置并没有以某种方式神奇地保存,所以我使用本地SharedObject来存储来自数据提供者的设置。我想我可以用FLfile编写一个文件,但我不想一直把数组转换成字符串再转换回来。我正在将数据提供程序的数组(dataProvider.toArray())写入ByteArray,我只是在需要时读回并插入到新数据提供程序的构造函数中。

只需在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 );");

我没有将setingsgrid.dataProvider.toArray()作为参数发送,而是构建了一个jsfl友好脚本,在dataProvider中循环,然后将构建的字符串作为参数传递。如果有人觉得方便,好吧,如果没有,我很乐意删除这个问题。谢谢你的建议。当时我在as3方面的经验比在jsfl方面的经验要多。已完成的扩展在此处可用:。当时我正在SharedObject中保存设置。使用FLFile会更容易。另外,如果我当时知道E4X的支持,那就简单多了。它可能有两个命令(一个用于生成,一个用于配置),但面板看起来比XML UI更好:)是的,我一直喜欢在windowSWFs中完成所有的工作,主要是因为它让我完全控制UI。顺便说一下,这是一个非常方便的扩展。我还得把我自己的应用程序转换成FLFile。我是ToonTitan()的开发者。。。它有这个颜色管理系统,它是所有存储在一个共享对象。。。该死的噩梦哈哈。