這篇文章的前三部分展示了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組件執行它自己的數據載入客戶端可以載入的數據總量是僅由可用的記憶存量限制的
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19459.html