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



为什么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>

相关内容

  • 没有找到相关文章

最新更新