为什么mxml不支持组件构造函数?

时间:2011-09-22 05:33:26

标签: flex mxml declarative-programming

为什么Flex框架的mxml语言不支持组件的构造函数或接受组件的构造函数参数?据我所知,如果它采用构造函数参数,则无法在mxml中声明ActionScript对象。我很好奇这个原因。它是Adobe的设计选择还是与声明性语言的工作方式有关?例如,为什么不允许:

<myNameSpace:MyComponent constructor="{argArray}"/> 

2 个答案:

答案 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>