http://blog.csdn.net/suhenhappy/article/details/7195728
一个最基本的Flex应用包括两种语言:AS和MXML.AS现在已经由一个面向过程的语言变成完全面向对象的语言了,MXML是一个布局语言,任何有过Html或Xml语言经验的人都能很容易上手。
MXML和Html是怎么联系到一起的呢?编译器通过不同的语法把他们翻译成同一个对象,所以
<mx:Button id="btn" label="My Button" height="100"/>
和
var btn:Button = new Button();
btn.label = "My Button";
btn.height = 100;
生成同一个对象,最大的不同在于,在AS中只是创建一个Button对象,而在MXML中可以在任何组件里添加这段代码并创建这个Button。Flex在MXML中创建这个对象的时候会调用构造函数或者添加到他的父类中或覆盖父类的属性。
MXML可以用<mx:Script>标签调用AS代码,但是AS里却不能调用MXML。用MXML写布局、组件,然后用AS来写EVENT事件和逻辑程序,尽管这个想法和吸引人,但实际并不总是这样。要更好的理解这两中语言的关系,必须明白,这两中语言是通过不同的语言去描述同一个对象。如果没有AS里的循环语句、函数定义、条件语句,我们根本做不出一个象样的Flash,所以除了一些非常简单的应用外,把AS和MXML结合到一起是必须的。
这一章我们将讨论AS与MXML结合方面的问题:
在MXML中创建一个元件,在AS中创建一个类,添加事件监听器,用AS和MXML创建一个code-behind文件,创建一个函数。
一。mxml编译器(mxmlc)
mxml编译器的作用是将mxml编译成as代码与as代码结合,共同合并成可以在flash player下运行的swf文件。当flex builder运行或调试flex程序时,mxml编译器被调用,分别将文件或调试状态的文件作为参数传递给mxml编译器。
在flex builder里也可设置mxml的其它参数来控制mxml的编译方式。如:-locale=es_ES -source-path+=/Users/base/Project等,在不同的参数中间用空格格开。
二。mxml与as的认识
mxml与as的关系,类似与jsp与脚本代码的关系,mxml页面里的对象更像是aspx页面,每创建一个组件都是一个对象。如:<mx:Button id="btn" label="My Button" height="100"/>与
var btn:Button = new Button();
btn.label = "MyButton";
btn.height = 100;
表达的是一个意思,只是第一种会添加到其父组件。
三。给mxml添加事件兼听器
1) <mx:Button click="buttonClick()" label="Click Me"/>
2) var btn:Button = new Button();
btn.label = "MyButton";
btn.height = 100;
btn.addEventListener(Event.*,buttonClick);
四。数组与对象
与java里的相似,比java里的更加灵活
1) var arr:Array = new Array();
2) <mx:Array id="arr"></mx:Array>
对象是可以嵌套的,每个object对象,都可以当成java里的Map来用(flex里没有Map<key,value>对象)
五。变量的作用域
有public、private、protected。作用域的含义与java里的一样。
六。自定义组件
创建as类,继承flex库里的组件
七。事件冒泡机制
子组件定义了事件,在父组件里照常调用,并可以在父组件里处理。
八。绑定组件属性
将变量前加上[Bindable],将组件的某属性绑定此变量,当变量改变时会触发事件,组件的被绑定的发展也会相应改变。
九。自定义事件处理
与自定义组件相同,只需要将新创建的as类,继承flash.events.Event.
十。监听键盘事件
在组件上添加addedToStage="stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler)";不管有没有被激活始终监听键盘事件,而keyDown="keyHandler(event)"只是在组件被激活时才监听。
十一。定义方法参数
可给方法的参数赋默认值,如:public function a(str:String = null){}
十二。检测对象类型
有is和typeof两种检测方式, UIComponent is Object/typeof(UIComponent)
十三。接口与类的定义
与java接口与类的规则一样。