在过去的 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-18718、SDK-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)的事实。我现在正在研究如何切换编译器。