这篇文章的前三部分展示了Flex组件如何实现逐步增强一个Web应用开源SWFObjec库使得嵌入Flash Player变的简化——一个Flex应用的实施环境——到HTML内Flash Player依次允许委派与用户界面相关的逻辑到Flex组件内Flex指定的用户界面语言不仅仅使得用户界面代码更简单而且使得你的应用程序从Flash Player的实时编译用户界面结果多种手段支持等等中获益匪浅另外因为Flex支持以CSS为基础的样式你的Flex组件将会与外界环境HTML页面相处得十分和谐 Flex与Java EE应用程序结合(一)
一个关键方面在于逐步增强的Flex能够通过数据传输到达Flex组件中在前面我们曾经提到服务器产生的JSON阵列反映了应用程序的数据然后它作为FlashVar传递到Flex组件内
尽管FlashVar允许Flex成为现有的企业级应用的一部分并且对应用程序的改变很小FlashVar仍然有一个非常大的限制因为FlashVar是由名称/值组成的字符串在浏览器上面对于字符串对象的最大长度有限制对于大多数浏览器而言这个限制是KB
两个阶段载入
你可以去掉这个限制这需要你为Flex组件执行它自己的数据载入作准备这就需要两个阶段载入的网页
对浏览器的要求做出响应第一个阶段载入HTML页面和嵌入的SWF(Flex)对象;
一旦Flex应用完全展现在浏览器上Flex获取应用程序的数据用来填充到组件中
第二阶段载入很多丰富客户端应用程序的一般协议通过减少响应时间可以改善用户体验只要用户定留在同一个HTML页面上阶段一的执行就只进行一次所有之后的数据存取的发生都是通过第二阶段实现的缓解了每一次浏览器检索以及重新展示用户界面的时候对于服务器的要求性能优势得益于这种模式充分利用了每个应用一个页面的模式比如说谷歌的Gmail和地图应用程序
这篇文章的其余部分将会说明Flex对于来自远程网络资源的数据载入最优化的三种方法通过HTTP载入JSON数据通过HTTP载入XML以及通过高性能的串行协议直接引用服务器Java对象对于RESTful 数据存取而言前两种方法是一个好的选择尽管远程对象引用适合RPC通信样式最新方法的一个优势是客户端以及服务器可以通过类型对象通信FlexEngine Yard的全新云服务
JSON 超越 HTTP
Flex的HTTP Service类使得委托JSON数据载入到Flex客户端的过程变得简单下面的ActionScript代码获得了指定的URL的内容作为Flex客户端完成事件处理程序的一部分
private function onCreationComplete():void {
HTTPService = new HTTPService();
httpurl = booksInventoryjson;
httpaddEventListener(ResultEventRESULT onResult);
httpaddEventListener(FaultEventFAULT onFault);
httpsend();
}
private function onResult(event:ResultEvent):void {
booksInventorydataProvider = JSONdecode(eventresult as String) as Array;
}
private function onFault(event:FaultEvent):void {
Alertshow(Cant load data: + ssage);
}
列表一使用HTTPService获取JSON数据
HTTPServiceFlex SDK的一部分为Ajax XMLHttpRequest对象提供相似的功能给予一个URL它使得你能够从HTTP数据源异步的获取数据send()会立即调用返回当结果返回的时候或者采用另一个选择就是将错误删除的时候回调机制采用这项功能
这个实例的结果以及失败处理程序功能都是由名称引用的编译程序将会找到与方法相匹配的名称以及必须的参数和返回类型然后分配这些功能作为操作者来处理这些结果或者失败的HTTP请求
实例的结果和失败处理功能每一个都是由一个单一行组成的你可以使用ActionScript功能让这些代码变的简练一些
private function onCreationComplete():void {
HTTPService = new HTTPService();
httpurl = booksInventory;
httpaddEventListener(ResultEventRESULT
function(event:ResultEvent):void {
booksInventorydataProvider =
JSONdecode(eventresult as String) as Array;
});
httpaddEventListener(FaultEventFAULT
function(event:FaultEvent):void {
Alertshow(Cant load data: + ssage);
});
httpsend();
}
列表二功能的成功和失败处理
ResultEvent的结果特性是非类型对象并且我们必须在其转变为JSON阵列之前将它转变为字符串因为这种转变确认了数据或者转变为指定的数据类型或者返回空值在这个例子当中错误的处理程序仅仅是显示了一些不友好的模块标示出了通信错误的原因
伴随着这种改变我们现在可以从Flex组件的外界环境HTML页面中去掉FlashVar因为Flex组件执行它自己的数据载入客户端可以载入的数据总量是仅由可用的记忆存量限制的