7

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

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

2 回答 2

6

您可以阅读IMXMLObject帮助 API 以获取有关您的问题的更多信息。他们没有确切说明为什么 mxml 不支持构造函数,但它说您必须通过其生命周期事件来控制 mxml 组件:预初始化、初始化和创建完成。

我想这是一个设计决定,考虑到 mxml 直接转换为 AS3 代码(您可以编译您的应用程序并添加 keep-generated-actionscript=true 并查看它产生的结果)。

于 2011-09-28T11:34:45.487 回答
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>
于 2013-09-30T23:42:47.773 回答