Flex 应用开发实战笔记

企业开发基础

查看mxml翻译成的as代码

         设置编译参数: 在属性的flex compiler   -keep-generated-actionscript=true

         源代码路径下generated文件夹

IMXMLObject接口

         对于不可视化组件(不是继承于UIComponent)如果实现了IMXMLObject接口,当以标签的方式创建组件时,会自动调用initialized方法,使得不可视对象可以访问它所在的document对象。

         MetaData  Inspectable的作用:为属性提供一些提示信息,如属性的类型、枚举的合法值、默认值等

客户端MVC

         每个功能有一个MXMLAS类文件,as文件实现模型和在模型上的操作(如获取远程数据、排序或过滤)。

         Mxml绑定as中的模型对象,如{ },而模型无需知道视图。

         用户操作时,MXML响应事件,调用as中的方法改变数据,再通过绑定机制自动刷新到MXML中。

异步调用

问题:

         模型数据不一致:flex不会阻塞当前线程,用户可能会以不同的参数多次对同一个远程调用,由于无法保证返回的顺序,则可能调用的参数和得到的结果不匹配。

         反复误操作:异步调用时间长,用户多次点击按钮

解决方法:

         弹出一个模式对话框,同时显示提示文字和进度条

Flex企业开发中的主要元素

Flex Application

System Manager

         Flex应用的主控者,是Flash Player实例化的第一个类,存储了主应用窗口的大小和位置信息,子组件、内嵌字体、样式和document对象

         Flex编译会只包含两帧,第一帧包含systemManagerpreloaderdownloadProcessBar和少量工具类。第二帧包含应用代码和内嵌资源。

         Creation_complete表示所有的子对象建立完成,application_complete表示全部子对象初始化完成。

Preloader

         负责监听Application RSL和模块的下载和初始化状态,并生成相应的进度条事件。默认情况下使用DownloadProgressBar作为系统默认的加载显示类。    

         加载现实类必须实现IPreloaderDisplay接口

创建自定义的加载显示类

1.       修改默认显示类的属性:继承于DownloadProgressBar,修改属性和覆写方法,并将新的实现类指定给Applicationpreloader。其中backgroundImage  backgroundSize backgroundAlpha  backgroundColor需要覆写get方法, backgroundImagebackgroundColor不能同时设置。

2.       监听加载事件,重新绘图(自行绘制进度条):集成于DownloadProcessBar,在set preloader中设置监听器

3.       重新实现IPreloaderDisplay接口:继承于Sprite,实现IpreloaderDisplay接口

Application

         是所有显示组件的根,每个UIComponent通过parentApplication指向Application类,以下属性:

         pageTitle:页标题,类似于jspheader

         preloader:预加载显示类名

         usePreloader:是否显示滚动条

         application:指向最上层的Application,在模块中使用

         url: swf文件的完整路径,读取该属性,可以获得服务器的名称和页面的参数,通过路径控制权限。

         parameters:网页中参数,也可以从url获得,不过这个更方便。访问方式类似于map,如 test.swf?name=hello 通过parameters.name能获得hello

通过SWF Loader加载Application

1.       主应用MainApp

通过 swfloader获得SubApp

   Var sub:SubApp=SubApp(SystemManager(loder.content).application)

   sub.fun()  //调用SubApp的函数

2.       子应用 SubApp

Application.application获得MainApp

   Application.application[‘mainLabel’].text=”sss”

实际中,只有父引用了解子应用

跨域访问

         访问相同域中的文件不需要任何额外的工作。

         如果跨域,

                   首先配置被访问的swf的跨域策略文件crossdomain.mxml

                   其次在as中设置

                            var lc:LoaderContext=new LoaderContext();

                            lc.securityDomain=SecurityDomain.currentDomain

运行期共享库RSL

         当客户端有多个flex应用,如果都共享一个图片文件、组件和其他资源,用户只需下载一次,可以明显减少主应用文件的大小,如果RSL发生变化,也只需要重新下载该RSL

1.       使用系统的RSL

工程属性-flex build path->library path->Framework linkage

2.       其他的swc

Flash builder没找到怎么操作

3.       自定义的swc

Flex on Java企业应用架构

选择框架

         客户端和服务器端使用HttpServiceWebService传递少量、数据格式不易变化的数据,大量的通信使用RemoteObject,通过AMF协议,可以直接将actionscript对象作为参数和返回结果。

使用BlazeDS的好处:

1.       支持二进制协议AMF

2.       实现asjava对象的自动转换

 

 

系统架构

服务器端:

CS中的数据对象不一致时,通常是在Server端再加一层接口RemoteFacade

Client中的voServer中的dto对应,代表参数和返回值,在包名和类名上一致

一个模块对应一个RemoteFacade

客户端:

      Proxy:封装了客户端对Remote Façade的调用代码,作为RemoteFacade的代理,是和RemoteFacade的包名类名相匹配的。

      VO:远程方法的参数和返回值

路径规划

      {公司路径}/{模块路径}/{类责任}

      类责任主要有 vo  model  view  proxy  events 

      MXML放在Project的根路径下

大规模应用解决方案

减少SWF大小

         将库文件和框架文件设为RSL,让swf在需要的时候加载

1.       在一个应用中,应该只有一个Application作为主应用,主应用以动态载入方式打开业务界面,主应用主要存储登录信息及其他全局公用信息,如消息流、权限等

2.       业务界面应该由Module类实现,以便于分工实现

3.       主和业务界面依赖的公共类库放在RSL

4.       对于每个业务模块有三个工程Flex Project   Java   Flex Library Project,有利于提取公有代码和分工合作

应用开发实例

开发环境

         常常将服务器端工程、客户端工程和客户端Library工程三部分分开,便于分工合作和加快编译速度。

         Flex SDK包文件分为 ExternalMerged into codeRSL三种类型,采用原则是如果包文件Flash虚拟机已经提供,则采用External类型;如果工程没有引用包中的任何类,则采用Merged into code;如果引用了包中的类,则使用RSL类型,包链接类型如下:

         框架部分、flex-libRSL,如果flex unit没有使用,则为merge into code

客户端数据过滤

         从服务器获取数据后,可以在客户端对数据进行过滤,思路如下:

                   设置grid.filterFunction=onFilter;  //参数item:Object 为该行对应数据

                   刷新grid.refresh();

                   设置过滤函数为Null  grid.filterFunction=null;    不影响后续的操作

客户端定位

         在返回结果中进行查找,对查找到得结果高亮显示,思路如下:

                   设置grid.selectedIndex 为查找到得行号

                   滚动到该行  grid.scrollToIndex(index)

                   设置为焦点  grid.setFocus()

使用户等待远程调用结束

         用户希望看到进度;后续操作的前提是本次操作的结果。

         实现方法:

                   创建组件:能同时监控多个操作或任务的进度,并能支持在操作或任务进行中锁定用户界面。当然通过程序启动、更新状态和停止进度监控的功能是必不可少的,具体实现参考代码。

                   设置RemoteObject busy属性为true

身份认证功能

         javalogin中,FlexContext.getHttpRequest() 可以得到客户端请求的request FlexContext.getFlexSession() 可以得到session对象

Flex部署到应用环境

         解决Flex所在工程改完工程名后flex需要重新编译。需要修改 web.xml加入FlexDispatcher.java ;创建FlexDispatcher.java;  flex工程中创建RemoteObject.as;其他as文件使用该RemoteObject完成远程访问

你可能感兴趣的:(webservice,服务器,Flex,application,library,actionscript)