Flex3.0 RIA开发详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2篇 ActionScript 3.0语法篇

第3章 ActionScript 3.0基础

ActionScript 3.0是在Flash Player运行环境下的编程语言,是一种面向对象的语言。在Flex工程中,使用ActionScript 3.0语言作为编程语言。应用程序的功能实现全部依赖于ActionScript 3.0。本章将介绍如何在Flex工程中使用ActionScript 3.0。

3.1 ActionScript 3.0概述

ActionScript 3.0是运行于Flash Player运行环境的编程语言,使用新的ActionScript虚拟机AVM 2。AVM 2使用新的二进制指令集,并在性能上有很大改进。同时,ActionScript 3.0使用面向对象模型,扩展和提高了应用程序接口。ActionScript 3.0代码被Flex Builder或Flash中的编译器编译成二进制数据。这种二进制数据被装入SWF文件中,然后运行于Flash Player运行环境中。

ActionScript 3.0继承之前的ActionScript版本,并有了较大的更新。ActionScript 3.0中包含大量的数据、对象和可重用代码,能开发出更加复杂的应用程序,且执行效率大大提高。

虽然ActionScript 3.0包含的许多类和组件与之前的版本名称相同,但是类和组件在ActionScript 3.0中更结构化,这与之前的ActionScript版本还是有很大的不同。此外,ActionScript 3.0中许多核心类新增了许多属性和方法,Flash Player API中也新增了许多对底层对象的控制。

3.2 使用ActionScript 3.0

Flex工程中可有两种方式使用ActionScript 3.0代码:一种是在MXML文件的<mx:Script>标签下使用ActionScript 3.0代码,另一种是直接在AS文件中编写ActionScript 3.0代码。

3.2.1 在MXML文件中直接编写ActionScript 3.0

在MXML文件中编写ActionScript 3.0代码,只要在MXML文件下插入<mx:Script>标签。语法如下所示:

        <mx:Script>
          <![CDATA[
              //ActionScript 3.0代码
          ]]>
        </mx:Script>

以下代码在MXML文件中的<mx:Script>标签下使用ActionScript 3.0。

        <mx:Script>
            <![CDATA[
                  public function a():void  //ActionScript 3.0代码
                  {
                    var i:int=100;
                  }
            ]]>
        </mx:Script>

· 在Flex Builder 3的编辑器中输入标签会自动封闭。例如,输入“<mx:Script>”后,自动生成封闭区域“<mx:Script><![CDATA[ ]]></mx:Script>”。

3.2.2 在AS文件中编写ActionScript 3.0

ActionScript Class、ActionScript File和ActionScript Interface都属于AS文件。三者的文件格式都为AS格式,不同的只是其中的定义有所区别。Flex应用程序中最常使用的AS文件是ActionScript Class,也就类的定义。用户可使用ActionScript Class创建向导来完成创建。创建ActionScript Class的步骤如下所示:

步骤1单击“File”|“New”|“ActionScript Class”命令,弹出“New ActionScript Class”对话框,如图3-1所示。

图3-1 新建AS文件对话框

步骤2在“Package”文本框中输入类的包,“Name”文本框中输入类名。“Modifiers”单选框选择类的类型,其中“public”表示公有类,“internal”表示内部类。“Superclass”文本框中输入继承的子类,“Interfaces”多项文本区域添加要实现的接口。“Code generation options”多选区域中选择生成类时的一些设置。其中,“Generate constructor from superclass”表示生成继承于子类的构造函数,“Generate functions inherited from interfaces”表示生成继承于接口的函数,“Generate comments”表示生成注释。单击“Finish”按钮,完成类的创建。

步骤3使用创建类向导生成的AS文件会自动显示于代码编辑器中,如图3-2所示。

图3-2 使用创建向导生成的AS类

用户可在代码编辑器中继续编写ActionScript 3.0代码。如下示例是一个完整的AS类。

        package com.asiatom.englishr.commands   //ActionScript 3.0代码
        {
            public class OpenVideoCommand
            {
                public function a():void
                {
                  var i:int=100;
                }
            }
        }

除了ActionScript Class创建向导外,还有ActionScript File创建向导和ActionScript Interface创建向导。

3.2.3 MXML中引用AS文件

MXML文件中若要引用AS文件有两种方式:一种是引用使用<mx:Script>标签中的“source”属性,语法如下所示。

        <mx:Script source="AS文件路径">

以下代码引用了一个名为“t.as”的AS文件。

        <mx:Script source="t.as">

这种方式可看成是将MXML文件和AS文件分离,从而减小MXML文件的代码,提高重用性。

另外一种方法是引用ActionScript Class(类)。使用这种方法的前提是AS文件中定义的是一个类。引用类的语法如下所示。

        import类所在的包;

以下代码引用了com.asiatom.englishr.commands包下的OpenVideoCommand类。

        import com.asiatom.englishr.commands.OpenVideoCommand;

3.3 创建第一个ActionScript 3.0应用程序

用户可以使用Flash、Flex Builder、Dreamweaver等任何文本编辑器编写ActionScript 3.0代码(AS格式文件)。本小节介绍使用Flex Builder 3创建一个简单的ActionScript 3.0应用程序。

1.设计ActionScript 3.0应用程序

用户总会在创建前构思应用程序的功能,此ActionScript 3.0应用程序的构思如下所示。

(1)应用程序名叫“HelloWorld”。

(2)应用程序中将显示“Hello World!”文字。

(3)应用程序使用一个名叫“Greeter”的类。

(4)应用程序中可输入用户名,并判断用户名是否存在于已知的数组中。

2.创建HelloWorld工程和Greeter类

Flex Builder 3中的创建步骤如下所示:

步骤1单击“File”|“New”|“Flex Project”命令,弹出“New Flex Project”对话框。

步骤2在“Project”文本框中输入工程名“HelloWorld”,单击“Finish”按钮,完成工程的创建。

步骤3单击“File”|“New”|“ActionScript File”命令,弹出“New ActionScript File”对话框。

步骤4选择路径,输入文件名“Greeter.as”,单击“Finish”按钮,完成类的创建。

3.编写Greeter类

在代码编辑器中完成对Greeter类的代码编写。Greeter类的代码如下所示。

        package
        {
            public class Greeter
            {
                public static var validNames:Array = ["Sammy"] "Frank", "Dean"];
                //根据名字返回不同的内容
                  public static function sayHello(userName:String = ""):String
                {
                  var greeting:String;
                  if (userName == "")
                  {
                        greeting = "Hello. Please type your user name, and then press
    the Enter key.";
                  }
                  else if (validName(userName))
                  {
                        greeting = "Hello  " + userName + ".";
                  }
                  else
                  {
                        greeting = "Sorry, " + userName + ", you are not on the list.";
                  }
                  return greeting;
                }
                //检查名字是否在数组中
                  public static function validName(inputName:String = ""):Boolean
                {
                  if (validNames.indexOf(inputName) > -1)
                  {
                        return true;
                  }
                  else
                  {
                        return false;
                  }
                }
            }
        }

· validNames数组存储了合法的用户名。在Greeter类加载时,数组被初始化。

· sayHello方法根据用户的名称来返回结果字符串。若参数为空,返回提示输入用户名字符串。若用户名合法,返回“Hello username.”字符串。若用户名不合法,返回"Sorry,userName,you are not on the list."字符串。

· validNames.indexOf(inputName)检查数组中是否包含inputName变量中的值。若没有找到,返回-1。若找到,返回相应的位置。

4.HelloWorld.mxml文件中添加ActionScript 3.0代码

在MXML编辑器中编写HelloWorld.mxml文件。HelloWorld.mxml文件的完整代码如下所示。

        <?xml version="1.0" encoding="utf-8"?>
        <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*"
            layout="vertical"
            creationComplete = "initApp()" >
            <!--ActionScript 3.0代码写入mx:Script中-->
            <mx:Script>
                <![CDATA[
                  public function initApp():void
                  {
                        //显示内容
                        mainTxt.text = Greeter.sayHello();
                  }
                ]]>
            </mx:Script>
            <mx:TextArea id = "mainTxt" width="400" backgroundColor="#DDDDDD" editable
    ="false" />
            <mx:HBox width="400">
                <mx:Label text="User Name:"/>
                <mx:TextInputid="userNameTxt"width="100%"enter="mainTxt.text=
    Greeter.sayHello(userNameTxt.text);" />
            </mx:HBox>
        </mx:Application>

· <mx:Application>定义了应用程序容器。

· <mx:Script>中可包含ActionScript 3.0代码。

· <mx:TextArea> 用于显示用户的文本。

· <mx:Script> 中定义了一个initApp方法,此方法在应用程序加载时调用。initApp方法中设置mainTxt变量的text属性等于Greeter类的sayHello方法的返回值,也就是“Hello World!”。

· enter动作是当用户按下回车时执行,也就是当用户在输入框中输入数据后,按下回车时触发事件。

5.编译运行程序

按下Ctrl+F11快捷键,开始编译运行程序。运行效果如图3-3所示。

图3-3 第一个ActionScript 3.0程序运行效果图

3.4 小结

ActionScript 3.0是Flex应用程序中的编程语言,控制Flex应用程序的执行,完成应用程序的各项功能。在Flex工程中使用ActionScript 3.0有两种方法:一种是在MXML文件的<mx:Script>标签下,一种是在AS文件中。对于大型应用程序来说,代码与模型的分离能使得程序更简洁。另外,将ActionScript 3.0代码写入AS文件也提高了代码的重用性。用户可以使用<mx:Script>标签中的Source属性来指明引用的AS文件,也可以使用引用类的方法来使用AS类。本章最后以HelloWorld实例讲解如何使用ActionScript 3.0代码。