为什么Flex框架的mxml语言不支持组件的构造函数或接受组件的构造函数参数?据我所知,如果它采用构造函数参数,则无法在mxml中声明ActionScript对象。我很好奇这个原因。它是Adobe的设计选择还是与声明性语言的工作方式有关?例如,为什么不允许:
<myNameSpace:MyComponent constructor="{argArray}"/>
答案 0 :(得分:6)
您可以阅读IMXMLObject帮助API,了解有关您的问题的更多信息。他们没有确切地说明为什么mxml不支持构造函数,但是它说你必须通过它的生命周期事件控制你的mxml组件:preinitialize,initialize和creationComplete。
我认为这是一个设计决策,考虑到mxml直接转换为AS3代码(您可以编译应用程序,添加keep-generated-actionscript = true并查看它产生的内容)。
答案 1 :(得分:4)
即使在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>