研究一段時間flex後發現,actionscript3和ruby一樣具有很強的動態性,可以構建十分強大的用戶端,但目前對於一些主要基於文本的系統來說有點殺雞用牛刀的感覺,可是未來的用戶端正在朝著多媒體化的方向發展,因為這樣會帶來更高的使用者體驗。感覺flex在用戶端上有著很好的表現,而ruby在後台業務處理上非常的靈巧,隨著兩者不斷的成熟與發展,有理由相信兩者的結合一定會在企業級AIR應用上開闢一片新天地。
下面是一個flex結合ruby on rails訂閱天氣預報的例子,實現起來比較簡潔自然。
ruby端:
Ruby代碼
- class WeathersController < ApplicationController
- require 'rss/1.0'
- require 'rss/2.0'
- require 'open-uri'
- def show
- feed= "http://www.raychou.com/weather/rss.php?id=#{params[:code]}"
- content = ""
- open(feed) do |s|
- content = s.read
- end
- @rss = RSS::Parser.parse(content, false)
- render :xml => @rss.channel <SPAN style="COLOR: #ff0000">#無需解析直接發送</SPAN>
- end
- end
class WeathersController < ApplicationController require 'rss/1.0' require 'rss/2.0' require 'open-uri' def show feed= "http://www.raychou.com/weather/rss.php?id=#{params[:code]}" content = "" open(feed) do |s| content = s.read end @rss = RSS::Parser.parse(content, false) render :xml => @rss.channel #無需解析直接發送 endend
flex端:
Java代碼
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="624" height="426">
- <mx:Script>
- <![CDATA[
- import mx.events.CloseEvent;
- import mx.rpc.events.ResultEvent;
- [Bindable]
- private var cityName: Array = [ {label:"北京", data:"54511"},
- {label:"南京", data:"58238"},
- {label:"上海", data:"58367"}
- ];
- [Bindable]
- private var selectedItem:Object;
- <SPAN style="COLOR: #ff0000">//<SPAN>處理請求</SPAN>,<SPAN>無需解析結果資料,直接用就可以了</SPAN></SPAN>
- private function resultWeather(event:ResultEvent):void{
- item1.text = event.result.channel.item[0].title.toString();
- item2.text = event.result.channel.item[1].title.toString();
- item3.text = event.result.channel.item[2].title.toString();
- }
- ]]>
- </mx:Script>
- <!--向後台發送http請求-->
- <mx:HTTPService result="resultWeather(event);" id="getWeather" url="http://localhost:3000/weathers/show" useProxy="false">
- <mx:request>
- <code>{selectedItem.data}</code>
- </mx:request>
- </mx:HTTPService>
- <mx:Panel x="171" y="54" width="418" height="333" layout="absolute" title="天氣預報查詢" fontWeight="bold" fontSize="13">
- <mx:ComboBox x="120" y="28" id="cmbCityName" dataProvider="{cityName}" close="selectedItem=ComboBox(event.target).selectedItem;
- getWeather.send();" width="164" fontSize="12"/>
- <mx:Label x="10" y="81" id="item1" text="" width="367" fontSize="14" color="#0A6464"/>
- <mx:Label x="10" y="126" id="item2" text="" width="367" fontSize="14" color="#0A6464"/>
- <mx:Label x="10" y="171" id="item3" width="367" fontSize="14" color="#0A6464"/>
- <mx:Label x="37" y="30" text="請選者城市"/>
- </mx:Panel>
- </mx:Application>
<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="624" height="426"> <mx:Script> <![CDATA[ import mx.events.CloseEvent; import mx.rpc.events.ResultEvent; [Bindable] private var cityName: Array = [ {label:"北京", data:"54511"}, {label:"南京", data:"58238"}, {label:"上海", data:"58367"} ]; [Bindable] private var selectedItem:Object; //處理請求,無需解析結果資料,直接用就可以了 private function resultWeather(event:ResultEvent):void{ item1.text = event.result.channel.item[0].title.toString(); item2.text = event.result.channel.item[1].title.toString(); item3.text = event.result.channel.item[2].title.toString(); } ]]> </mx:Script> <!--向後台發送http請求--> <mx:HTTPService result="resultWeather(event);" id="getWeather" url="http://localhost:3000/weathers/show" useProxy="false"> <mx:request> <code>{selectedItem.data}</code> </mx:request></mx:HTTPService><mx:Panel x="171" y="54" width="418" height="333" layout="absolute" title="天氣預報查詢" fontWeight="bold" fontSize="13"><mx:ComboBox x="120" y="28" id="cmbCityName" dataProvider="{cityName}" close="selectedItem=ComboBox(event.target).selectedItem;getWeather.send();" width="164" fontSize="12"/><mx:Label x="10" y="81" id="item1" text="" width="367" fontSize="14" color="#0A6464"/><mx:Label x="10" y="126" id="item2" text="" width="367" fontSize="14" color="#0A6464"/><mx:Label x="10" y="171" id="item3" width="367" fontSize="14" color="#0A6464"/><mx:Label x="37" y="30" text="請選者城市"/></mx:Panel></mx:Application>