为什么 Flex 框架的 mxml 语言不支持组件的构造函数或接受组件的构造函数参数?据我所知,如果它采用构造函数参数,则无法在 mxml 中声明 ActionScript 对象。我很好奇原因。它是 Adobe 的设计选择还是与声明性语言的工作方式有关?例如,为什么不允许:
<myNameSpace:MyComponent constructor="{argArray}"/>
为什么 Flex 框架的 mxml 语言不支持组件的构造函数或接受组件的构造函数参数?据我所知,如果它采用构造函数参数,则无法在 mxml 中声明 ActionScript 对象。我很好奇原因。它是 Adobe 的设计选择还是与声明性语言的工作方式有关?例如,为什么不允许:
<myNameSpace:MyComponent constructor="{argArray}"/>
您可以阅读IMXMLObject帮助 API 以获取有关您的问题的更多信息。他们没有确切说明为什么 mxml 不支持构造函数,但它说您必须通过其生命周期事件来控制 mxml 组件:预初始化、初始化和创建完成。
我想这是一个设计决定,考虑到 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>