自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

jQuery Mobile和Sencha Touch開發(fā)移動應(yīng)用過程對比

移動開發(fā)
jQuery開發(fā)團隊發(fā)布了jQuery移動設(shè)備版開發(fā)項目jQuery Mobile Project。jQuery Mobile不僅會給主流移動平臺帶來jQuery核心庫,而且會發(fā)布一個完整統(tǒng)一的jQuery移動UI框架。

jQuery MobileSencha Touch開發(fā)移動應(yīng)用過程對比是本文要介紹的內(nèi)容,HTML5雖然離全面普及還有很長的時間,但在一些開發(fā)領(lǐng)域,HTML5已經(jīng)嶄露頭角。

比如在移動開發(fā)中,HTML5更能體現(xiàn)其跨平臺的特性(Flash雖然積極努力,但仍然被iOS等系統(tǒng)拒之門外),說到這里,不得不提一下HTML5在移動開發(fā)領(lǐng)域的兩個優(yōu)秀框架:Sencha Touch 和 jQuery Mobile。本文將站在一個Flash開發(fā)者的角度,以一個簡單的RSS閱讀器實例(這個實例已經(jīng)在這篇文章《走進Android[1]:如何開發(fā)基于Adobe AIR的Android應(yīng)用》中實現(xiàn)過),初步為大家介紹一下使用這兩個框架構(gòu)建移動應(yīng)用的差異。

前置知識

首先您需要大致了解Sencha Touch 和 jQuery Mobile。

Sencha Touch簡介:

前不久基于JavaScript編寫的Ajax框架ExtJS,將現(xiàn)有的ExtJS整合JQTouch、Rapha?l庫,推出適用于最前沿Touch Web的Sencha Touch框架,該框架是世界上***個基于HTML5的移動應(yīng)用框架。進入Sencha Touch官方網(wǎng)站查看更多介紹。

jQuery Mobile簡介:

為了讓移動設(shè)備也能用上jQuery,jQuery開發(fā)團隊發(fā)布了jQuery移動設(shè)備版開發(fā)項目jQuery Mobile Project。jQuery Mobile不僅會給主流移動平臺帶來jQuery核心庫,而且會發(fā)布一個完整統(tǒng)一的jQuery移動UI框架。

工具

工欲善其事,必先利其器,開發(fā)之前,要先準(zhǔn)備好開發(fā)工具和調(diào)試工具。

IDE:可以使用任意文本編輯器,隨您哪個順手就用哪個,本文將使用Eclipse+Spket,這是一個非常不錯的,主要用于開發(fā)Ext應(yīng)用的插件,但經(jīng)過配置也可用于jQuery開發(fā),點擊這里查看詳細(xì)介紹。

調(diào)試工具:很遺憾Firefox對Sencha Touch的渲染效果非常差,所以我們不能使用Firebug來調(diào)試。可以使用谷歌瀏覽器,其調(diào)試工具也不遜色,而對這兩款框架的支持程度都尚好。而為了驗證Sencha Touch的效果無偏差,***再裝一個Safari瀏覽器,它對Sencha Touch的渲染是***的。

最終運行效果(點擊查看大圖)

jQuery Mobile和Sencha Touch開發(fā)移動應(yīng)用過程對比 圖 

jQuery Mobile和Sencha Touch開發(fā)移動應(yīng)用過程對比 圖

在線預(yù)覽(請使用Safari或谷歌瀏覽器觀看):

  1. Sencha Touch版:  
  2. http://wwwriameetingcom/examples/sencha/  
  3. jQuery Mobile版:  
  4. http://wwwriameetingcom/examples/jqmobile/ 

RSS閱讀器開發(fā)過程之Sencha Touch篇

首先進入Sencha Touch官網(wǎng),下載開發(fā)包,開發(fā)包中包含必須的JS類庫和CSS,示例等等。

然后新建一個HTML頁面,代碼如下:

  1. <html> 
  2. <head> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
  4. <meta name="viewport" content="width=device-width;   
  5. initial-scale=10;   
  6. maximum-scale=10;   
  7. minimum-scale=10;   
  8. user-scalable=0;" /> 
  9. <link rel="stylesheet" href="css/sencha-touchcss" type="text/css"> 
  10. <link rel="stylesheet" href="css/indexcss" type="text/css"> 
  11. <title>List</title> 
  12. <script type="text/javascript" src="ext-touch-debugjs"> 
  13. </script> 
  14. <script type="text/javascript" src="testjs"> 
  15. </script> 
  16. </head> 
  17. <body> 
  18. </body> 
  19. </html> 

body區(qū)域留空即可,這也算是Ext開發(fā)的一個特點,絕大多數(shù)工作都依賴JS來完成。注意testjs是由我們建立,用來編寫頁面邏輯。邏輯代碼的實現(xiàn)步驟:

首先創(chuàng)建一個ExtComponent,并指定它的HTML模板定義,用來作為RSS顯示的列表視圖

創(chuàng)建一個基本組件,只顯示一行字符串,作為第二個視圖

創(chuàng)建一個基于Tab顯示的面板,面板的Tab自動從視圖的Title中抽取,類似于Flex中的ViewStack

用Ajax的方式,發(fā)起對遠(yuǎn)程數(shù)據(jù)的請求,用循環(huán)的方式獲取數(shù)據(jù),并Push到數(shù)組中,更新顯示列表

具體代碼如下:

  1. Extsetup({tabletStartupScreen: 'tablet_startuppng',//設(shè)置加載狀態(tài)時平板電腦上顯示的圖片  
  2. phoneStartupScreen: 'phone_startuppng',//設(shè)置加載狀態(tài)時手機屏幕顯示圖片  
  3. icon: 'iconpng',//圖標(biāo)設(shè)置  
  4. glossOnIcon: false,//相當(dāng)于HTML的onload,加載完畢時觸發(fā)的方法  
  5. onReady:function() {  
  6.    //創(chuàng)建一個列表組件,Component是所有Ext組件類的基類,設(shè)置尺寸為充滿這個屏幕  
  7.    //注意tpl屬性,這是定義一個HTML模板,使用{}來表明是可變字段  
  8.    var list = new ExtComponent({fullscreen: true,title: 'RIAMeeting News Reader',scroll: 'vertical',tpl:'  
  9.    <tpl for=""> 
  10.    <div class="listItem"> 
  11.    <h2>{title}</h2> 
  12.    <p>{content}</p> 
  13.    </div></tpl>'  
  14.  });//創(chuàng)建一個基本組件,只顯示一行字符串  
  15.  var about = new ExtBoxComponent({  
  16.  fullscreen: true,title: 'About',scroll: 'vertical',html:'RIAMeeting'});  
  17.    //創(chuàng)建一個基于Tab顯示的面板,面板的Tab自動從視圖的Title中抽取,類似于Flex中的ViewStack  
  18.    //注意animation用來設(shè)置切換視圖產(chǎn)生的動畫,而item則指定顯示哪些視圖  
  19.    var panel = new ExtTabPanel({fullscreen: true,animation: 'slide',items: [list,about]});  
  20.    //加載數(shù)據(jù)之前,先在界面上顯示LoadingExtgetBody()mask('Loading', 'x-mask-loading', false);  
  21.    //聲明一個數(shù)組,將來用返回數(shù)據(jù)來填充var result = [];  
  22.    //用Ajax的方式,發(fā)起對遠(yuǎn)程數(shù)據(jù)的請求,注意跨域問題,一旦跨域請使用代理或其它方式解決ExtAjaxrequest({url: 'rssxml',  
  23.    //數(shù)據(jù)URLsuccess: function(response, opts) {  
  24.    //數(shù)據(jù)加載成功之后的回調(diào)方法  
  25.    var xmlDom = responseresponseXML;  
  26.    var items = xmlDomgetElementsByTagName('item');  
  27.    //用XMLDom的方式獲取數(shù)據(jù)節(jié)點//用循環(huán)的方式獲取數(shù)據(jù),并Push到數(shù)組中  
  28.    for(var i=0;i<itemslength;i++) {  
  29.       var item = items[i];  
  30.       var t = getText(itemgetElementsByTagName('title')[0]);  
  31.       var d = getText(itemgetElementsByTagName('description')[0]);  
  32.       resultpush({title:t,content:d});  
  33.     }ExtgetBody()unmask();//刪除Loading顯示  
  34.     listupdate(result);//更新列表  
  35.   }  
  36. }  
  37. );  
  38. //這個方法用來獲取XML節(jié)點的文本值  
  39. function getText(oNode) {var sText = "";for (var i = 0;   
  40. < oNodechildNodeslength;   
  41. i++) {  
  42. if (oNodechildNodes[i]hasChildNodes()) {  
  43. sText += getText(oNodechildNodes[i]);  
  44. } else   
  45. {sText += oNodechildNodes[i]nodeValue;  
  46. }}  
  47. return sText;  
  48. }  
  49. }  
  50. }  
  51. ); 

注意因為要調(diào)取遠(yuǎn)程數(shù)據(jù),在本地是看不到效果的,您需要將它部署到一個Server上,才能正常運行。

RSS閱讀器開發(fā)過程之jQuery Mobile篇

同樣請進入jQuery Mobile的官網(wǎng),下載***的開發(fā)包(依賴的JS類庫和CSS,圖片)。

創(chuàng)建HTML頁面,代碼如下:

  1. <html> 
  2. <head> 
  3. <title>Lists</title> 
  4. <link rel="stylesheet"  href="jquerymobile-10a1mincss" /> 
  5.   <script src="jquery-143minjs"> 
  6.   </script><script type="text/javascript" src="jquerymobile-10a1minjs"> 
  7.   </script><script src="newsjs"> 
  8.   </script> 
  9. </head> 
  10. <body> 
  11.   <div data-role="page"> 
  12.   <div data-role="header"> 
  13.   <h1>RIAMeeting RSS Reader</h1> 
  14.   </div> 
  15.   <div data-role="content"> 
  16.   <ul data-role="listview"> 
  17.   </ul> 
  18.   /div> 
  19.   </div> 
  20. </body> 
  21. </html> 

注意newsjs是我們用來編寫邏輯JavaScript的文件,而ul則是RSS列表顯示所用的容器。

newsjs的邏輯實現(xiàn):

  1. //相當(dāng)于HTML的onload,加載完畢時觸發(fā)的方法  
  2. $(document)ready(function(){  
  3.    //用Ajax的方式,發(fā)起對遠(yuǎn)程數(shù)據(jù)的請求,注意跨域問題,一旦跨域請使用代理或其它方式解決  
  4.  $ajax({url: '/rssxml',//數(shù)據(jù)  
  5.  URLdataType: 'xml',//數(shù)據(jù)類型設(shè)置  
  6.  type: 'GET',//Get還是  
  7.  Posttimeout: 10000,//超時設(shè)置,單位為毫秒  
  8.  error: function(xml){//加載錯誤的處理方法  
  9.     alert("loading xml error");  
  10.  },success: function(xml){/加載成功的處理方法//也是用循環(huán)遍歷數(shù)據(jù)節(jié)點  
  11.  $(xml)find("item")each(function(i){var title = $(this)children("title")text();//獲取標(biāo)題內(nèi)容  
  12.  var description = $(this)children("description")text();//獲取摘要內(nèi)容  
  13.  var liNode = $('<li role="option" class="ui-li ui-li-static ui-btn-up-c">');//聲明一個li標(biāo)簽節(jié)點  
  14.  $("<h3></h3>")html(title)appendTo(liNode);//用h3包裹標(biāo)題并添加到li節(jié)點  
  15.  $("<p></p>")html(description)appendTo(liNode);//用p包裹摘要并添加到li節(jié)點  
  16.  liNodeappendTo("ul");//最終將li節(jié)點添加到ul節(jié)點,形成列表顯示  
  17.  });  
  18.  }});  
  19. }) 

同樣的,您需要將它部署到一個Server上,才能正常運行。

總結(jié)對比

Sencha Touch:重量級框架,類似于Flex SDK;組件封裝較多;在各平臺交互表現(xiàn)統(tǒng)一(內(nèi)部封裝);入門門檻較高

jQuery Mobile:輕量級框架,實質(zhì)是jQuery插件;組件較少;交互表現(xiàn)依賴于平臺自身,會有差異;入門門檻較低。

小結(jié):jQuery MobileSencha Touch應(yīng)用移動開發(fā)過程對比的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2012-02-28 14:48:41

2011-09-05 10:49:14

Sencha ToucjQuery MobiHTML5

2011-09-05 13:45:25

jQuery MobiSencha Touc移動Web UI框架

2011-09-02 16:42:51

Sencha ToucWeb應(yīng)用

2012-01-10 14:10:26

Sencha Touc

2011-09-02 15:18:49

Sencha Touc

2012-03-21 09:36:33

ibmdw

2011-07-25 16:21:22

Sencha touc

2011-07-26 10:21:25

Sencha Touc

2011-07-26 10:44:15

Sencha Touc

2011-12-12 10:08:39

jQuery MobiHTML5

2011-09-05 11:23:26

EclipseSencha Touc框架

2011-07-21 15:37:40

jQuery MobiJQMJSON

2011-07-26 09:41:50

Sencha Touc特性HTML 5

2010-11-22 10:31:17

Sencha touc

2009-08-10 09:26:56

2011-06-30 09:46:59

jQuery MobiRails

2011-07-25 15:55:21

Sencha ToucHtml 5

2011-09-05 10:27:02

Sencha Touc手機應(yīng)用Android

2011-09-05 14:17:54

Sencha ToucMVC
點贊
收藏

51CTO技術(shù)棧公眾號