Sencha Touch和jQuery Mobile开发过程对比

移动开发
HTML5虽然离全面普及还有很长的时间,但在一些开发领域,HTML5已经崭露头角。比如在移动开发中,HTML5更能体现其跨平台的特性(Flash虽然积极努力,但仍然被iOS等系统拒之门外),说到这里,不得不提一下HTML5在移动开发领域的两个优秀框架:Sencha Touch 和 jQuery Mobile。

本文将站在一个Flash开发者的角度,以一个简单的RSS阅读器实例(这个实例已经在这篇文章《如何开发基于Adobe AIR的Android应用》中实现过),初步为大家介绍一下使用这两个框架构建移动应用的差异。

前置知识

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

Sencha Touch简介:http://mobile.51cto.com/Sencha-278623.htm

前不久基于JavaScript编写的Ajax框架ExtJS,将现有的ExtJS整合JQTouch、Raphaël库,推出适用于最前沿Touch Web的Sencha Touch框架,该框架是世界上第一个基于HTML5的移动应用框架。进入Sencha Touch官方网站查看更多介绍。

jQuery Mobile简介:http://mobile.51cto.com/others-277308.htm

为了让移动设备也能用上jQuery,jQuery开发团队发布了jQuery移动设备版开发项目jQuery Mobile Project(http://jquerymobile.com)。jQuery Mobile不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架。

工具

工欲善其事,必先利其器,开发之前,要先准备好开发工具和调试工具。

IDE:可以使用任意文本编辑器,随您哪个顺手就用哪个,本文将使用Eclipse+Spket,这是一个非常不错的,主要用于开发Ext应用的插件,但经过配置也可用于jQuery开发,点击这里查看详细介绍。

调试工具:很遗憾Firefox对Sencha Touch的渲染效果非常差,所以我们不能使用Firebug来调试。可以使用谷歌浏览器,其调试工具也不逊色,而对这两款框架的支持程度都尚好。而为了验证Sencha Touch的效果无偏差,最好再装一个Safari浏览器,它对Sencha Touch的渲染是最好的。

最终运行效果(点击查看大图)

在线预览(请使用Safari或谷歌浏览器观看):

Sencha Touch版:http://www.riameeting.com/examples/sencha/

jQuery Mobile版:http://www.riameeting.com/examples/jqmobile/

RSS阅读器开发过程之Sencha Touch篇

首先进入Sencha Touch官网,下载开发包,开发包中包含必须的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; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=0;" /> 
  5. <link rel="stylesheet" href="css/sencha-touch.css" type="text/css"> 
  6. <link rel="stylesheet" href="css/index.css" type="text/css"> 
  7. <title>List</title> 
  8. <script type="text/javascript" src="ext-touch-debug.js"></script> 
  9. <script type="text/javascript" src="test.js"></script> 
  10. </head> 
  11. <body></body> 
  12. </html> 

 

body区域留空即可,这也算是Ext开发的一个特点,绝大多数工作都依赖JS来完成。注意test.js是由我们建立,用来编写页面逻辑。逻辑代码的实现步骤:

  • 首先创建一个Ext.Component,并指定它的HTML模板定义,用来作为RSS显示的列表视图
  • 创建一个基本组件,只显示一行字符串,作为第二个视图
  • 创建一个基于Tab显示的面板,面板的Tab自动从视图的Title中抽取,类似于Flex中的ViewStack
  • 用Ajax的方式,发起对远程数据的请求,用循环的方式获取数据,并Push到数组中,更新显示列表

具体代码如下:

  1. xt.setup({ 
  2. tabletStartupScreen: 'tablet_startup.png',//设置加载状态时平板电脑上显示的图片 
  3. phoneStartupScreen: 'phone_startup.png',//设置加载状态时手机屏幕显示图片 
  4. icon: 'icon.png',//图标设置 
  5. glossOnIcon: false
  6. //相当于HTML的onload,加载完毕时触发的方法 
  7. onReady:function() { 
  8. //创建一个列表组件,Component是所有Ext组件类的基类,设置尺寸为充满这个屏幕 
  9. //注意tpl属性,这是定义一个HTML模板,使用{}来表明是可变字段 
  10. var list = new Ext.Component({ 
  11. fullscreen: true
  12. title: 'RIAMeeting News Reader'
  13. scroll: 'vertical'
  14. tpl:'<tpl for="."><div class="listItem"><h2>{title}</h2><p>{content}</p></div></tpl>' 
  15. }); 
  16. //创建一个基本组件,只显示一行字符串 
  17. var about = new Ext.BoxComponent({ 
  18. fullscreen: true
  19. title: 'About'
  20. scroll: 'vertical'
  21. html:'RIAMeeting' 
  22. }); 
  23. //创建一个基于Tab显示的面板,面板的Tab自动从视图的Title中抽取,类似于Flex中的ViewStack 
  24. //注意animation用来设置切换视图产生的动画,而item则指定显示哪些视图 
  25. var panel = new Ext.TabPanel({ 
  26. fullscreen: true
  27. animation: 'slide'
  28. items: [list,about] 
  29. }); 
  30. //加载数据之前,先在界面上显示Loading 
  31. Ext.getBody().mask('Loading...''x-mask-loading'false); 
  32. //声明一个数组,将来用返回数据来填充 
  33. var result = []; 
  34. //用Ajax的方式,发起对远程数据的请求,注意跨域问题,一旦跨域请使用代理或其它方式解决 
  35. Ext.Ajax.request({ 
  36. url: 'rss.xml',//数据URL 
  37. success: function(response, opts) {//数据加载成功之后的回调方法 
  38. var xmlDom = response.responseXML; 
  39. var items = xmlDom.getElementsByTagName('item');//用XMLDom的方式获取数据节点 
  40. //用循环的方式获取数据,并Push到数组中 
  41. for(var i=0;i<items.length;i++) { 
  42. var item = items[i]; 
  43. var t = getText(item.getElementsByTagName('title')[0]); 
  44. var d = getText(item.getElementsByTagName('description')[0]); 
  45. result.push({title:t,content:d}); 
  46. Ext.getBody().unmask();//删除Loading显示 
  47. list.update(result);//更新列表 
  48. }); 
  49. //这个方法用来获取XML节点的文本值 
  50. function getText(oNode) { 
  51. var sText = ""
  52. for (var i = 0; i < oNode.childNodes.length; i++) { 
  53. if (oNode.childNodes[i].hasChildNodes()) { 
  54. sText += getText(oNode.childNodes[i]); 
  55. else { 
  56. sText += oNode.childNodes[i].nodeValue; 
  57. return sText; 
  58. }); 

注意因为要调取远程数据,在本地是看不到效果的,您需要将它部署到一个Server上,才能正常运行。

RSS阅读器开发过程之jQuery Mobile篇

同样请进入jQuery Mobile的官网,下载最新的开发包(依赖的JS类库和CSS,图片)。

创建HTML页面,代码如下:

  1. <html> 
  2. <head> 
  3. <title>Lists</title> 
  4. <link rel="stylesheet" href="jquery.mobile-1.0a1.min.css" /> 
  5. <script src="jquery-1.4.3.min.js"></script> 
  6. <script type="text/javascript" src="jquery.mobile-1.0a1.min.js"></script> 
  7. <script src="news.js"></script> 
  8. </head> 
  9. <body> 
  10. <div data-role="page"> 
  11. <div data-role="header"> 
  12. <h1>RIAMeeting RSS Reader</h1> 
  13. </div> 
  14. <div data-role="content"> 
  15. <ul data-role="listview"></ul> 
  16. </div> 
  17. </div> 
  18. </body> 
  19. </html> 
 

注意news.js是我们用来编写逻辑JavaScript的文件,而ul则是RSS列表显示所用的容器。

news.js的逻辑实现:

  1. //相当于HTML的onload,加载完毕时触发的方法 
  2. $(document).ready(function(){ 
  3. //用Ajax的方式,发起对远程数据的请求,注意跨域问题,一旦跨域请使用代理或其它方式解决 
  4. $.ajax({ 
  5. url: '../rss.xml',//数据URL 
  6. dataType: 'xml',//数据类型设置 
  7. type: 'GET',//Get还是Post 
  8. timeout: 10000,//超时设置,单位为毫秒 
  9. error: function(xml){//加载错误的处理方法 
  10. alert("loading xml error"); 
  11. }, 
  12. success: function(xml){//加载成功的处理方法 
  13. //也是用循环遍历数据节点 
  14. $(xml).find("item").each(function(i){ 
  15. var title = $(this).children("title").text();//获取标题内容 
  16. var description = $(this).children("description").text();//获取摘要内容 
  17. var liNode = $('<li role="option" class="ui-li ui-li-static ui-btn-up-c">');//声明一个li标签节点 
  18. $("<h3></h3>").html(title).appendTo(liNode);//用h3包裹标题并添加到li节点 
  19. $("<p></p>").html(description).appendTo(liNode);//用p包裹摘要并添加到li节点 
  20. liNode.appendTo("ul");//最终将li节点添加到ul节点,形成列表显示 
  21. }); 
  22. }); 
  23. }) 

同样的,您需要将它部署到一个Server上,才能正常运行。

总结对比

Sencha Touch:重量级框架,类似于Flex SDK;组件封装较多;在各平台交互表现统一(内部封装);入门门槛较高

jQuery Mobile:轻量级框架,实质是jQuery插件;组件较少;交互表现依赖于平台自身,会有差异;入门门槛较低

责任编辑:佚名 来源: 瑞研社区
相关推荐

2011-09-01 10:09:04

2011-09-05 10:49:14

Sencha ToucjQuery MobiHTML5

2011-09-05 13:45:25

jQuery MobiSencha Touc移动Web UI框架

2011-09-02 15:18:49

Sencha Touc

2011-07-25 16:21:22

Sencha touc

2011-09-05 11:23:26

EclipseSencha Touc框架

2011-07-26 09:41:50

Sencha Touc特性HTML 5

2010-11-22 10:31:17

Sencha touc

2011-07-25 15:55:21

Sencha ToucHtml 5

2011-09-02 16:42:51

Sencha ToucWeb应用

2011-09-05 11:27:17

Sencha Touc框架HTML5

2011-09-05 10:20:21

Sencha ToucAPP

2011-07-26 09:58:24

2012-01-10 14:10:26

Sencha Touc

2011-07-26 09:46:53

Sencha Touc

2011-07-26 10:21:25

Sencha Touc

2011-07-26 10:44:15

Sencha Touc

2011-08-15 10:14:41

Sencha ToucMyEclipseTomcat

2011-09-02 16:21:08

Sencha Touc自动生成工具

2011-09-05 10:39:03

Sencha Touc离线存储数据库
点赞
收藏

51CTO技术栈公众号