Flex 应用开发实战笔记
企业开发基础查看mxml翻译成的as代码???????? 设置编译参数: 在属性的flex compiler?? -keep-generated-actionscript=true ???????? 源代码路径下generated文件夹 IMXMLObject接口???????? 对于不可视化组件(不是继承于UIComponent)如果实现了IMXMLObject接口,当以标签的方式创建组件时,会自动调用initialized方法,使得不可视对象可以访问它所在的document对象。 ???????? MetaData? Inspectable的作用:为属性提供一些提示信息,如属性的类型、枚举的合法值、默认值等 客户端MVC???????? 每个功能有一个MXML和AS类文件,as文件实现模型和在模型上的操作(如获取远程数据、排序或过滤)。 ???????? Mxml绑定as中的模型对象,如{ },而模型无需知道视图。 ???????? 用户操作时,MXML响应事件,调用as中的方法改变数据,再通过绑定机制自动刷新到MXML中。 异步调用问题: ???????? 模型数据不一致:flex不会阻塞当前线程,用户可能会以不同的参数多次对同一个远程调用,由于无法保证返回的顺序,则可能调用的参数和得到的结果不匹配。 ???????? 反复误操作:异步调用时间长,用户多次点击按钮 解决方法: ???????? 弹出一个模式对话框,同时显示提示文字和进度条 Flex企业开发中的主要元素Flex ApplicationSystem Manager???????? 是Flex应用的主控者,是Flash Player实例化的第一个类,存储了主应用窗口的大小和位置信息,子组件、内嵌字体、样式和document对象 ???????? Flex编译会只包含两帧,第一帧包含systemManager,preloader,downloadProcessBar和少量工具类。第二帧包含应用代码和内嵌资源。 ???????? Creation_complete表示所有的子对象建立完成,application_complete表示全部子对象初始化完成。 Preloader???????? 负责监听Application RSL和模块的下载和初始化状态,并生成相应的进度条事件。默认情况下使用DownloadProgressBar作为系统默认的加载显示类。???? ???????? 加载现实类必须实现IPreloaderDisplay接口 创建自定义的加载显示类 1.?????? 修改默认显示类的属性:继承于DownloadProgressBar,修改属性和覆写方法,并将新的实现类指定给Application的preloader。其中backgroundImage? backgroundSize backgroundAlpha? backgroundColor需要覆写get方法, backgroundImage和backgroundColor不能同时设置。 2.?????? 监听加载事件,重新绘图(自行绘制进度条):集成于DownloadProcessBar,在set preloader中设置监听器 3.?????? 重新实现IPreloaderDisplay接口:继承于Sprite,实现IpreloaderDisplay接口 Application类???????? 是所有显示组件的根,每个UIComponent通过parentApplication指向Application类,以下属性: ???????? pageTitle:页标题,类似于jsp的header ???????? preloader:预加载显示类名 ???????? usePreloader:是否显示滚动条 ???????? application:指向最上层的Application,在模块中使用 ???????? url: swf文件的完整路径,读取该属性,可以获得服务器的名称和页面的参数,通过路径控制权限。 ???????? parameters:网页中参数,也可以从url获得,不过这个更方便。访问方式类似于map,如 test.swf?name=hello 通过parameters.name能获得hello 通过SWF Loader加载Application1.?????? 主应用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企业应用架构选择框架???????? 客户端和服务器端使用HttpService和WebService传递少量、数据格式不易变化的数据,大量的通信使用RemoteObject,通过AMF协议,可以直接将actionscript对象作为参数和返回结果。 使用BlazeDS的好处: 1.?????? 支持二进制协议AMF 2.?????? 实现as和java对象的自动转换 ? ? 系统架构服务器端: 当C和S中的数据对象不一致时,通常是在Server端再加一层接口RemoteFacade类 Client中的vo和Server中的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包文件分为 External、Merged into code和RSL三种类型,采用原则是如果包文件Flash虚拟机已经提供,则采用External类型;如果工程没有引用包中的任何类,则采用Merged into code;如果引用了包中的类,则使用RSL类型,包链接类型如下: ???????? 框架部分、flex-lib是RSL,如果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 身份认证功能???????? 在java的login中,FlexContext.getHttpRequest() 可以得到客户端请求的request。 FlexContext.getFlexSession() 可以得到session对象 Flex部署到应用环境???????? 解决Flex所在工程改完工程名后flex需要重新编译。需要修改 web.xml加入FlexDispatcher.java ;创建FlexDispatcher.java;? flex工程中创建RemoteObject.as;其他as文件使用该RemoteObject完成远程访问 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |