5

在过去的 2 个小时里,我一直在谷歌搜索,寻找一些关于如何在 as3 中添加我自己的自定义元数据标签的简单说明,但没有成功。我开始认为我可能没有在寻找正确的术语。

问题

最终,我想要做的是在函数上添加自定义元数据,该函数将函数作为参数并确保给定函数具有正确的参数。

即我有以下功能:

public function testCallback(callback:Function):void
{
    callback("test");
}

当我这样调用它时,我想得到一个编译器错误:

public function doNothing():void
{
    // doing nothing
}

public function someRandomFunction():void
    // ...
    testCallback(doNothing);
}

我正在考虑这样做的方式是拥有这个元数据:

[Callback(paramName="callback",callbackParams="string")]
public function testCallback(callback:Function):void
{
    callback("test");
}

扩展将在编译期间运行,如果传递的函数不包含正确的参数,则会抛出编译时错误。我认为使用flex2.compiler.util.ThreadLocalToolkit.logError (path, line, errorMessage); 我可以做到这一点。

搜索

我已经在谷歌上搜索了几个小时,但找不到可以让我入门的简单教程。我发现了一些 SDK 错误报告(SDK-18718SDK-26041)、未完成的论坛帖子、关于如何在 FlexBuilder 中添加自定义元数据的教程(?)(我正在使用 FlashDevelop),一个不太有用的答案在 StackOverflow和更多死胡同中。

帮助

到目前为止,据我所知,我将使用 Java 创建扩展,然后使用编译器命令将其添加到我的项目中。但是,我不知道我需要什么才能开始。

我的两个主要问题是:
A)我需要什么才能在 Java 中创建扩展?(我需要 Flex Builder 吗?Eclipse?我的类路径中需要哪些库?)
B)一旦我将它编译成某种东西(一个 swc?),我如何将它包含在我的 AS3 项目中的 FlashDevelop 中?

提前致谢!

更新

我已经能够在 Eclipse 中创建一个 Java 项目,添加 Flex 库,实现 IMxmlcExtension 接口并将项目编译到一个带有正确 MANIFEST 文件的 jar 中。不幸的是,在 FlashDevelop 中添加额外的 -extension=MyTest.jar 并没有起到任何作用。

如果它有用,编译器的生成命令行是

mxmlc -load-config+=obj\MyProject.xml -debug=true -incremental=true -swf-version=10 -extension=flex_test.jar -o obj\MyProject634846490611881374

更新 2

Timofei Davydik帮助我缩小了问题范围。似乎 FlashDevelop 是主要问题。创建一个扩展并在命令行中编译它是可行的。我在 FlashDeveloper 的论坛中创建了一个主题。如果您有兴趣,该线程是:-extension 编译器选项

更新 3

Pilippe是正确的,看来问题出在 FlashDevelop 使用Flex Compiler SHell (fcsh)的事实。我现在正在研究如何切换编译器。

4

2 回答 2

2

真的很有趣的问题。我做了一些研究。是的,我们可以编写 mxmlc 扩展并添加一些自定义功能。但是处理自定义元数据确实很复杂,需要大量时间调试和探索 flex 编译器源。我在我的博客中创建了一篇关于扩展的帖子,您可以查看它:

http://tim-davydik.blogspot.com/2012/09/flex-compiler-mxmlc-extensions-forcing.html

于 2012-09-29T12:03:18.127 回答
0

如何使元数据标签在动作脚本中工作

Timofei Davydik在他的博客中写了一个快速简单的教程来回答我的问题,命名为Flex 编译器 mxmlc 扩展。强制编译器语言,并帮助我找出问题所在(这就是我给他赏金的原因)。在他的帖子中,他使用的是 Flash Builder 而不是 FlashDevelop,这将我们带到下一个问题的答案:

如何使用 Flash Develop 对它们进行编程

不幸的是,正如Phillipe指出的,对于 AS3 项目,FlashDevelop 使用不支持元数据的 Flex Compiler SHell (FCSH)。由于 FlashDevelop 是开源的,我将尝试(并且可能会失败)切换编译器以进行测试。对于其他对此感兴趣的人,我认为这个论坛帖子是一个好的开始:[礼物] 在 flashDevelop 4.x 中尝试新的 AS3 编译器 (ASC 2.0)

于 2012-10-08T02:55:33.583 回答