0

我想从 javascript 端调用 flex 中的一个方法,

这样我就可以检索包含 flex 数据的 javascript 对象。

现在我正在尝试

var result:Object = new Object()
var keyset:Array = data.getKeySet();

for (var i:int = 0 ; i < keyset.length ; i++) {
    result[keyset[i]] = data.get(keyset[i]);
}

return result;

但它不起作用。我怎样才能使它正确?

ps 我知道这是基本问题,但即使我搜索了一个小时,我也找不到任何东西。所以请帮忙!

4

2 回答 2

2

要在页面上的 Flash/Flex 和 JS 之间进行通信,请使用 ExternalInterface 类。您不能直接传递对象,但可以将对象转换为可序列化/字符串。以下是您如何调用名为“myFunc”的函数并为其设置两个参数,一个字符串和一个数字:

ExternalInterface.call('myFunc',1,'aString');

在函数名(必须始终是字符串)之后,有一个 ...rest 参数。简单地说,这意味着您可以向函数发送任意数量的参数,用逗号分隔它们(我们在这里做两个)。

如果您在过去的任何时候使用过 AS2,您可能知道“eval”函数,它是从 JS 继承的(因此仍然被使用)——它分析一个字符串并尝试将其解析为 JavaScript,使用它你可以从字面上理解发送 Javascript 代码而不是 func/args:

ExternalInterface.call('alert("Hello!")');

如果您想要双向通信,请使用 ExternalInterface.addCallBack 函数将函数注册为可从 JS 调用。

如果执行此操作时出现错误,您可能需要调整嵌入代码:“在包含 HTML 页面的 SWF 文件的对象标记中,设置以下参数:

参数名称="allowScriptAccess" 值="总是"

于 2012-10-22T09:29:49.737 回答
1

我相信您不能直接从 JS 调用 AS3 中的方法(反之亦然)。不过,它应该有一个接口,可以在其中调用另一个。如果我没记错的话,你应该使用ExternalInterfaceAPI

此外,您也不能将 Flex 对象传递给 JS(反之亦然)。尝试构建一个可序列化为 JSON 的通用对象,并使用该序列化数据相互传递数据。接收方可以将其解析回以使用数据。在这个例子中,代码将一个字符串从 JS 传递到 AS3。

在您的情况下, Flex 功能将:

  • 建立一个对象
  • 用数据填充它
  • 将其序列化为 JSON 字符串
  • 将字符串返回给调用者

那么当JS调用函数时:

  • JS接收字符串
  • 用于JSON.parse()将 JSON 字符串重构为 JS 对象
  • 使用对象
于 2012-10-22T08:10:09.917 回答