Flex 编译器可以编译不包含任何 Flex 组件字节码的“纯 AS3”SWF 文件。所以,
是否有可能创建一个自定义组件框架(用于代替 Flex 框架),仍然可以使用 MXML(阅读:标记)进行可视化布局,并编译为 SWF,而不依赖于 Flex 框架本身?
Flex 编译器可以编译不包含任何 Flex 组件字节码的“纯 AS3”SWF 文件。所以,
是否有可能创建一个自定义组件框架(用于代替 Flex 框架),仍然可以使用 MXML(阅读:标记)进行可视化布局,并编译为 SWF,而不依赖于 Flex 框架本身?
是的,这是可能的。您的 MXML 文件本质上只是指定类的一种不同方式。您可以通过编译您的项目并提供-compiler.keep-generated-actionscript=true
给mxmlc
.
bar.mxml:
<?xml version="1.0" encoding="utf-8"?>
<flash:Sprite xmlns:flash="flash.display.*">
</flash:Sprite>
用 编译后mxmlc -compiler.keep-generated-actionscript=true bar.mxml
变成下面这样。
生成/栏生成.as:
package {
import flash.display.Sprite;
// bunch of imports
public class bar extends Sprite {
public function bar() { super(); }
}
}
有两种不同的编译器:一种用于将 ActionScript 代码编译为 AVM 字节码,另一种 (mxmlc) 将 MXML 文件编译为 ActionScript 代码,然后由第一个编译器编译。如果您想查看生成了什么 AS3 代码,请将“-keep”参数传递给 MXML 编译器。
从理论上讲,可以按照您的建议进行操作。我的猜测是,mxmlc 对 UIComponent 类的功能进行了很大的调整,因此您可能不得不对 mxmlc 进行一些修改,以免它对非 UIComponent 类产生影响。即便如此,由于诸如 [Bindable] / 数据绑定之类的东西利用了 Flex 框架功能(不是普通的 Flash Player / AVM 功能),您将重写大量代码。