[Flex]正确理解MXML文件
不要误会,这里并不解释MXML文件的基础意义,只是要说下它的作用和在生成编译的SWF时会发生的变化。
整个MXML文件就是一个Class!当你编写一个MXML文件并编译它的时候,Flex编译器会创建一个新类,并生成这个类要使用的ActionScript代码。
一个MXML应用程序(以<mx :Application>标签开始的文件)定义了Application类的子类。与之相似的,一个MXML组件(以组件标签开始的文件,比如<mx :Button>)定义了该组件的一个子类。子类的名字就是文件名。基类是顶级标签的类。
尽管在MXML文件里只写了一个<mx :Application>,而实际上是这样定义应用程序的:
class MyApp extends Application
在MyButton.mxml里以<mx :Button>开始,而本质上是像下面这样定义:
class MyButton extends Button
在<mx :Script>块里声明的变量和函数都被定义为子类的属性和方法。
当设置组件的id属性时,实际上是在最终生成的类里定义里公共变量,这个变量保存对该组件的引用。比如,如果<mx :Button id=”myButton” />标签内嵌在多个容器很深的地方,但你仍然可以使用myButton引用它。
事件属性最终变成了子类自动生成的事件监听器方法的函数体,比如:
<mx :Button id=”myButton” click=”foo = 1; doSomething()”>
变成了:
private function __myButton_click(event:MouseEvent):void {
foo = 1;
doSomething()
}
事件属性变成了方法体,因此它们可以访问子类的其他属性和方法。
明白以上这些很重要,它会帮助你理解为什么<mx :Script>块中只能放变量声明和函数,而不能直接写语句。
不能把主MXML文件的名字命名为内置方法、属性的名字!!!!!!!!!!!!!!比如由于describeType是flash.utils包里的方法,你的mxml文件绝不能命名为describeType!

11月 2nd, 2007 at 4:10 下午
呵呵,不错!如果换个角度来看,让自己来写一个mxml解析器,看看自己对着这个xml文件怎么来把它变成as代码就更能理解它这样做的机制了:)
11月 5th, 2007 at 8:23 上午
呵呵,是啊,如果真能写出这个解析器来,一定可以更透彻的理解MXML的。