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

Posted

技术标签:

【中文标题】如何将对象从 windowSWF 传递到 JSFL?【英文标题】:how to pass an object from a windowSWF to JSFL? 【发布时间】:2010-11-05 13:45:36 【问题描述】:

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

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

在我的 windowSWF 中,我有一个名为 settingsGrid 的 DataGrid,其中包含以下列: ["前缀","后缀","类型"] 我正在尝试将 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)

【问题讨论】:

我没有发送 settingsGrid.dataProvider.toArray() 作为参数,而是构建了一个 jsfl 友好的脚本,循环遍历 dataProvider,然后将构建的字符串作为参数传递。如果有人觉得它很方便,好的,如果没有,我很乐意删除这个问题。 【参考方案1】:

我将对象从数据网格传递到 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 的构造函数中。

【讨论】:

【参考方案2】:

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

【讨论】:

感谢您的建议。那时我使用 as3 的经验比使用 jsfl 的经验要多。完整的扩展可在此处获得:adobe.com/cfusion/exchange/…。那时我将设置保存在 SharedObject 中。使用 FLFile 会更容易。另外,如果我当时知道 E4X 支持,那就简单多了。它可能是 2 个命令(一个用于生成,一个用于配置),但 Panel 看起来比 XML UI 更好:) 是的,我一直喜欢在 windowSWF 中完成所有工作,主要是因为它让我可以完全控制 UI。顺便说一句,这是一个非常方便的扩展。我也必须将自己的应用程序转换为 FLFile。我是 ToonTitan (flashfilmmaker.com/news/toon-titan-4.html) 的开发人员...它有这个颜色管理系统,它全部存储在一个共享对象中...该死的噩梦哈哈。

以上是关于如何将对象从 windowSWF 传递到 JSFL?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Flash JavaScript 文件 (.jsfl) 将库中的对象添加到舞台?

如何在 JSFL 文件中包含一些 js 文件?

如何在 JSFL 中获得符号的描边边界?

如何在不运行的情况下打开 JSFL 文件?

在 testMovie 命令之后,如何让 JSFL 将跟踪输出保存到文件中?

如何通过 XMLUI 从 JSFL 中的 Flash 创作中获取值?