如何将对象从 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) 将库中的对象添加到舞台?