zoukankan      html  css  js  c++  java
  • Flex学习总结

    Flex SDK Flex框架类库、Flex编译环境、调式器、MXML、ActionScript编程语言以及其它工具组成,Flash Builder是其开发环境,

     

    Flash Player的工作模型

    由两大部分组成:ActionScrip虚拟机 图形渲染引擎GR

     

     

    Flex实战

    认识Flex

    javaScript和ActionScript都是基于ECMAScript标准的实现。

    BlazeDS简介:

    LiveCycle是面向大型企业的,还有一个类似的产品:BlazeDS,作为中间层的服务器组件,它的功能是:使用HTTP和AMF3的实时数据推送。是免费的,

    BlazeDS是java社区采用Flex的主要原因,它允许java开发人员通过把BlazeDS作为连接Flex对象和java对象的桥梁。

    Flex的工作原理

    Flex的核心是免费的sdk,sdk提供了构建Flex应用程序的框架,

    Flex语言,创建Flex应用程序要使用Flash Builder;

    Flex由两种编程语言组成:

    基于XML的MXML标签语言

    ActionScript脚本语言

    MXML负责应用程序核心内容的主要布局,ActionScript用于以脚本形成编写驱动应用程序需要的所有逻辑。

    开发生命周期

    典型Flex应用程序SDLC:

    使用Flash Builder或SDK,在本地开发环境中编写MXML和ActionScript代码

    测试使用Flash Builder,sdk编译代码,输出.swf

    通过浏览器启动此文件,此时需要调用Flash Player插件,开始执行应用程序。

    Flex应用程序要与服务器层交互以获得数据

    准备发布应用程序,将.swf及相关文件发布到web服务器上,用户通过一个URL调用该应用程序。

     

    事件驱动的环境

    一切与事件有关,Flex是一个事件驱动的开发框架。

    事件驱动的应用程序包含的这两种机制分别是:

    事件触发器:导致事件发生。

    事件处理程序:负责响应事件的处理程序。其实就是逻辑代码。

    Flex的局限

     

     

     

    1. 从零开始

    建立编译环境

    1. 下载Flex SDK,
    2. 检查是否安装了FlashPlayer,如安装了,删除它,因SDK中用;
    3. 安装SDK中的FlashPlayer,
    4. Flash Player 10 ActiveX.exe 这是针对IE调试播放器
    5. Flash Player 10 Plugin.exe 这是针对其他浏览器的调试播放器
    6. 在bin文件夹添加到path环境变量中,c:flexin

    建立编辑环境

    Eclipse下载一个插件:

    获得Flash Builder

    它有两个分发方式,一种独立版,另一种是插件版

    探索Flash Builder

    5个类别

    Package包,表示当前所在的目录

    Class类,表示这个api参考页面描述的特定对象

    Inheritance继承,当前对象继承了哪些父对象

    Implements实现,接口,对象会实现接口所要求的属性和函数方法,

    Subclasses子类,当前对象的子对象,

     

    Properties属性,可以检索和设置的值

    Methods方法,支持函数

    Event事件,对象会对此有所反应的操作,当某种操作发生时会触发特定指令的执行

    Style样式,类似于html中使用的css样式

    effects效果,与事件一起使用,以便指定播放效果。

     

    MXML与ActionScript速写

    Flex基于MXML和ActionScript;

    MXML的结构:MXML是一种基于标签的编码系统,它派生自XML,MXML遵循XML所有规则和约定:

    1. XML文件以及MXML文件,要求必须有xml声明 用以定义版本和字符编码

      <?xml version="1.0" encoding="utf-8"?>

    2. XML文件必须有一个顶层的根元素及尾元素
    3. MXML语言区分大小写
    4. 每一个标签必须都有一个开始标签和结束标签,
    5. 标签间的嵌套关系必须正确。
    6. 特性的值必须加引号
    7. 每个空的字符都算数

    MXML与ActionScript的关系

    使用ActionScript添加功能、做出判断,提供交互性及构建业务逻辑。

    事件由ActionScript处理

    Flex应用程序是由事件驱动的,程序中发生的一切都是由事件引起的结果。

     

     

     

     

     

     

     

     

     

     

    BlazeDS

    BlazeDS 为使用Flex 或者AIR 的客户端程序提供了高度可扩展的远程访问和消息服务。
    blazeds :是一门技术,是一门面向AS的前后台通讯框架
    在服务器端:提供3种服务,远程调用(remoting-config.xml中配置),访问代理(proxy-config.xml中配置)、消息服务(messasing-config.xml中配置)同时允许你添加一些自定义的服务(在service-config.xml中配置)
    在客户端blazeds 提供了RemoteObject、HttpService、WebService、Product、Comsumer等组件来提供访问服务器端数据的能力,其中RemoteObject、Product、Comsumer是amf协议来交换数据的,而HttpService、WebService是用比较通用的访问协议可以用来访问非blazeds服务器。
    关联客户端和服务器端:destination、channel、endpoint。首先在服务器端定义需要的destination,根据destination所属的service类别不同,应该在destination定义在不同的配置文件里(remoting-config.xml、messaging-config.xml、proxy-config.xml中),同时为destination指定channel(如果不指定,会用默认的channel)、
    以上所有这些组件都包括在flex SDK和rpc.swc组件库中
    在客户端的代码你只要为你的组件(如remotingObject)指定destination和取得数据后的回调函数就可以了,剩下的就是编译器的事情了。Flex为你隐藏了channel的调用,所以需要写的代码很少。

    BlazeDS通过使用RemoteObject控件可以轻松实现,而不需要配置他们像SOAP-compliant网络服务。
    BlazeDS可以访问各种不同的数据持久化方案,比如数据库、JMS等其他持久化机制。The message-based framework(基于消息的框架)
    BlazeDS在客户端和服务器端来回的传送数据,他是一个基于消息的框架,主要运用了两种交换模式,第一种,请求/响应模式,客户端发送请求给服务端,服务端处理好之后返回一个包含结果的响应,RPC服务就是使用的这种模式;第二种,发布/订阅模式,服务端将数据发布给订阅了该消息的客户端列表,消息服务就是使用这种模式来发布数据给各客户端的,同时,消息服务也使用请求/响应模式来解决一些发布消息、数据交换等问题。

     

    Flex与服务器端通信第三种方式,remote object,远程对象

    Adobe:LCDS(LiveCycle Data Service),BlazeDS

     

     

     

     

    三、使用ActionScript

    注释:行注释// one comment; 多行注释 /* */

    变量

    声明某种类型的变量后,赋值必须是这种类型的变量,如不是这行代码就是无效的。

    var myVar:Number;

    myVar = "test";

    Flex检查类型匹配的方法有两种,即静态类型检查和动态类型检查

    静态类型检查在编译时执行,由编译器负责维护类型规则。

    动态类型检查,Flash Player负责在应用程序执行期间决定变量类型。

    默认情况下,编译应用程序时使用的静态类型检查。

    顶级类

    在Flex4中所有基本数据类型都被转换成类,并放到顶层包中。在顶层包中包含的一些类:array,Boolean,Class,Date,int,Number,Object,String,Uint,Vector,XML,XMLList;

    顶层类是不需要导入包的。

    var myString:String = "hello";

    var myXML:XML=<root><node></node><root>;

    var myObj:Object={x:1,y:2,z:3};

    特殊的数据类型

    *

     

    void

     

    undefined

    与void同时使用,void的值是undefined

    null

     

    NaN

    非数字,由number数据类型使用,

    ActionScript变量区分大小写,

     

    循环

    1. for(初使值;条件;递增)

    for(var x:int = 1 ; x <= 10;i++)

    trace()是把结果输出到日志文件中,

    1. for(属性名 in 数组/对象);

    var myArray:Array = {"a","b","c"};

    for(var myStr:String in myArray)

    { trace(myStr); }

    结果:0,1,2

    这种循环是按照属性名迭代,数组的属性名是数组的索引,取值时需要通过下列形式取值。

    trace(myArray(myStr))

     

    1. for each(项in数组/对象)

    for each … in 循环用于迭代数组和对象,但测试的不是属性名,需是属性值。

    for each(var i:string in myObject){

        trace(i); 打印出来是值,不是键

    }

    1. while

    whiel(x < 5){

        trace(x);

    }

    1. do while
    2. if…else

    if()

    {..}

    else if()

    else

    {}

    1. switch

      switch(){

      case 'happy';

      case 'sad'

      default:

      }

    2. 数组

    ActionScript支持3种主要数组:

    索引数组 以数值作为每个值的键。

    var hArray:Array= new Array();

    push() 把项添加到数组末

    hArray.push("John Doe");

    unshift() 把项添加到开头

    hArray.unshift("Mike");

    pop() 删除数组末尾的项

    hArray.pop();

    shift()删除数组开头的项

    hArray.shift()

    splice()从某个位置删除项,然后根据需要插入新项

    第一个参数:指定从数组中的哪个索引位置开始操作,

    第二个参数:指定想要删除的数量,

    第三个参数:从第一个参数指定的索引开始插入新的项。

    hArray.splice(1,0,"hello");

    hArray.splice(1,1);

    hArray.splice(3,2,"Ryan","matt","Jeff");

    数组的初始化:

    var Arrayhouse:Array = new ["a","b","c"];

     

    关联数组 以任何形式的键与值建立关联。

    它与索引数据的区别在于,与值对应的键面不是索引,关联数组中的项是以无序方式保存的,

    var carM:Array = new Array();

    carM["ax"] = "s";

    carM["ab"]="c";

    在检索时,通过键就可以访问。

    trace(carM["ax"]);

    关联数组支持使用点表示

    carM.ax;

     

    多维数组 数组的数组。

     

    ActionScript特色语法

    花括号

    逻辑操作符和快捷方式

    ++;--;

    基本比较符

    ==;!=;<;<=;!求反

    数学操作符:

    *,/,%,+,-

    函数、类、包

    创建函数

    public function checkout(input:String):void{}

    CDATA在这里是告诉Flex编译器方括号中的内容原样不动,不作为XML处理;

    将ActionScript代码保存在单独的文件中

    文件名保存为myFunction.as;;

    <fx:Script source="myFunction.as" />

    <fx:Script>

    <![CDATA[

    import mx.controls.Alert;

    ]]>

    </fx: script>

    注意:必须在使用函数的文件中导入包;

    简单的数据绑定

    ActionScript支持一种功能,能够让一个项目监听另一个项目的值,这个功能就是绑定。

    不使用绑定:

    <s:Button label="Copy:" click="myinput2.text = myinput1.text"/>

    添加绑定:

    <s:TextInput id="myinput2" text = "{myinput1.text}" />

    还可以使用双向绑定,

    <s:TextInput id="myinput1" text = "{myinput2.text}" />

    <s:TextInput id="myinput2" text = "{myinput1.text}" />

    在花括号内可以放置任意表达式;

    绑定标签

    使用<fx:Binding>标签在外部连接组件,

    <fx:Binding source="myinput1.text" destination="myinput2.text" twoWay="true" />

    <s:TextInput id="myinput1"/>

    <s:TextInput id="myinput2"/>

    使用ActionScript变量可被绑定

    要为ActionScript变量添加绑定,需要使用元关键字[Bindable],在mxml中的元关键字用于描述变量,组件,类的额外属性,

    四、布局和容器

    1.Spark与Halo/mx

    Spark容器允许改变布局算法,需Halo组件则内置布局算法。

    布局通过布局管理器处理,通过3个阶段确定每个视觉组件的位置和大小:

    1. 提交过程,查看所有组件的属性设置,将执行每个组件的commitProperties()方法,
    2. 测量过程,计算所有组件的默认大小。首先查看最深层的组件,然后由内而外查看其他组件。布局管理器运行每个对象的measureSizes()方法来确定默认/指定的大小。
    3. 布局过程,这个过程是从最外层开始,逐步深入到嵌套层次最深的组件。这个过程调用每个组件的updateDisplayList()方法,使组件刷新显示的内容。

    每个Spark窗口都支持将其布局改为下面任意一种布局:

    BasicLayout绝对布局,使用x,y坐标

    HorizontalLayout

    VerticalLayout

    TileLayout网格形式显示组件,创建尽可能多的行和列

     

    xmlns:fx和xmlns:s 为Spark组件添加前缀

    xmlns:mx 为Halo/MX组件添加前缀

     

    2.绝对布局(BasicLayout)

    Application窗口默认使用的绝对布局;

    3.基于约束的布局

    它是相对于容器的4个边或容器中心点定位组件。

    这个容器的优点是在调整窗口大小的时,仍然可以保持组件与容器的相对位置关系不变。

    基本约束,组件离窗口的右下角的距离,

    组件的top,bottom,left,right属性用于控制与相关边的距离

    horizontalCenter,verticalCenter属性控制在相应方向与中心的距离,

    baseline属性用于设置组件的上边与其父容器的距离。

    增强的约束,这个允许开发人员在水平和垂直方向上任意创建隐藏的辅助线,然后对照辅助线定位组件。这些辅助线中约束行和约束列。

    约束线有3种方法放到容器中:

    固定约束 位置由绝对数字来指定

    相对约束 位置由相对容器大小的百分比来确定

    内容大小约束 相对于内容而言是确定的。

    1.两列固定分割 通过<mx:ConstraintColumn>标签可以在容器中创建两个列

    <mx:Canvas width="100%" height="100%" borderColor="0x996969">

            <mx:constraintColumns>

                <s:ConstraintColumn id="col1" width="200"/>

                <s:ConstraintColumn id="col2" width="50"/>

            </mx:constraintColumns>

            <s:Button left="col1:50" label="button 1"/>

            <s:Button left="col2:0" label="button 2"/>

        </mx:Canvas>

    2.带左右约束的两列固定分割

    <s:Button left="col1:50" label="button 1" right="col1:0"/>

    <s:Button left="col2:0" label="button 2" right="col2:0"/>

    3.带上下约束的两行固定分割

    4.有偏移的两行加两列分割

    5.基于内容大小的约束

    它是在不指定约束的heigth和width属性的值时自动启用的。

    4.自动布局

    1.使用布局类

    对Spark容器可以使用4种布局类,用于绝对布局(BasicLayout类),

    HorizontalLayout,VerticalLayout,TileLayout,则提供了自动布局选项。

    <s:layout>

        <s:TileLayout columnWidth="200" orientation="columns" requestedColumnCount="2"/>

    </s:layout>

        <s:Button label="button 1" />

        <s:Button label="button 2" />

        <s:Button label="button 2" />

    2.需要空间

    <mx:Spacer/> 相当于<td width="50"></td>

    <s:Button label="button 1" /> <s:Spacer width="50%" />

        <s:Button label="button 2" />

    5.可变大小和固定大小

    就是使用数值或是百分比来进行控制。

    6.容器

    容器是组件的集合,用于为应用程序提供一种视觉结构。

    Flex新添加的一些Spark容器:

    Application 一个应用程序只能有一个Application容器,是程序的根窗口。

    Group用于分组项目的一个基本容器,默认用BasicLayout绝对布局。它的子容器是

    Hgroup,Vgroup

    SkinnableContainer 类似于Group,但支持换肤功能。

    Panel基于SkinnableContainer,添加一个标题栏和一个框架

    DataGroup用于分组数据,

    SkinnableDataContainer类似于DataGroup,可换肤。

    Application容器

    这是Flex应用程序的主程序,属性:preloader,这是启动Flex应用程序时看到的进度条。

    xmlns:local="*"

     

    Canvas容器

    基于Group的容器和SkinnableContainer

    <s:Group>

    <s:Hgroup/>

    <s:Vgroup/>

     

    创建皮肤文件,有两条基本规则:

    1.必须支持组件可能具有的所有状态。

    2.必须在名为contentGroup的皮肤内定义一个额外的容器。

    创建皮肤类:CoolSkin.mxml;

    <s:SparkSkin xmlns:fx……..>

    </s:SparkSkin>

    引用:

    <s:SkinnableContainer skinClass="CoolSkin">

            <s:layout>

                <s:HorizontalLayout/>

            </s:layout>

            <s:Button label="button 1"/>

            <s:Button label="button 2" />

        </s:SkinnableContainer>

    Panel容器

    默认使用BasicLayout类,

    <s:Panel title="MY Title">

            <s:HGroup top="5" bottom="5" left="5" right="20">

                <s:Button label="button1" />

                <s:Button label="button2" />

            </s:HGroup>

        </s:Panel>

     

    ApplicationControlBar容器

    在应用程序中创建了一个与多数桌面应用程序的File菜单以进行编辑,设置等类似的区域,

        <mx:ApplicationControlBar width="100%" >

            <s:Button label="Back" />

            <s:Button label="Forward" />

            <s:TextInput width="60" />

            <s:Button label="Search" />

        </mx:ApplicationControlBar>

     

    DataGroup和SkinnableDataContainer

     

    dataGroup或SkinnableDataContainer可以使用下面这两个项渲染器,

    spark.skins.default.DefaultItemRenderer将数据显示为简单文本

    spark.skins.default.DefaultComplexItemRenderer将数据显示为Group容器内的组件。

     

     

     

    DividedBox、HDividedBox、VDividedBox容器

     

     

    From容器

     

     

     

    Grid容器

     

     

     

    五、显示表单与捕获用户输入

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    六、验证用户输入

  • 相关阅读:
    Constants and Variables
    随想
    C#基础篇之语言和框架介绍
    Python基础19 实例方法 类方法 静态方法 私有变量 私有方法 属性
    Python基础18 实例变量 类变量 构造方法
    Python基础17 嵌套函数 函数类型和Lambda表达式 三大基础函数 filter() map() reduce()
    Python基础16 函数返回值 作用区域 生成器
    Python基础11 List插入,删除,替换和其他常用方法 insert() remove() pop() reverse() copy() clear() index() count()
    Python基础15 函数的定义 使用关键字参数调用 参数默认值 可变参数
    Python基础14 字典的创建修改访问和遍历 popitem() keys() values() items()
  • 原文地址:https://www.cnblogs.com/liyanwei2013/p/3371166.html
Copyright © 2011-2022 走看看