为什么Flex框架的mxml语言不支持组件的构造函数或者不接受组件的构造函数参数?据我所知,不可能在mxml中声明ActionScript对象,如果它需要构造函数参数。我很好奇原因。这是Adobe的设计选择,还是与声明性语言的工作方式有关?例如,为什么不允许:
<myNameSpace:MyComponent constructor="{argArray}"/>
您可以阅读IMXMLObject帮助API以获取有关您的问题的更多信息。他们并没有告诉你为什么mxml不支持构造函数,但是它说你必须通过生命周期事件来控制你的mxml组件:preinitialize, initialize和creationComplete。
我想这是一个设计决定,考虑到mxml被直接翻译成AS3代码(你可以编译你的应用程序添加keep-generated-actionscript=true,看看它产生了什么)。
即使在MXML中定义了类,也可以通过实例化实例变量来实现构造函数,如下所示。这将在各种事件(如"preinitialize"或"creationComplete")被分派之前被调用。
<myNameSpace:MyComponent>
<fx:Script>
<![CDATA[
private var ignored:* = myInstanceConstructor();
private function myInstanceConstructor():* {
// Do something - called once per instance
return null;
}
]]>
</fx:Script>
</myNameSpace:MyComponent>
此外,类变量可以按如下方式初始化。
<myNameSpace:MyComponent>
<fx:Script>
<![CDATA[
private static var ignored:* = myClassConstructor();
private static function myClassConstructor():* {
// Do something - called once per class
return null;
}
]]>
</fx:Script>
</myNameSpace:MyComponent>