博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
建立第一个Sencha Touch应用
阅读量:6608 次
发布时间:2019-06-24

本文共 14038 字,大约阅读时间需要 46 分钟。

准备

开始开发前,请先到下面的地址下载Sencha Touch 2的包: 。下载完解压后你会发现包里有很多文件。里面有api文档、开发包和一些实例等等。现在,我们只需要sencha-touch-debug.js和resources/css/sencha-touch.css文件即可。(sencha-touch-debug.js文件里面是未经压缩的带注释的js代码,方便我们阅读和debug)。

包文件到手了,选上一个你喜欢的IDE,建立一个web项目并把文件引进吧。我选了Aptana Studio建立了以下目录结构:

 

开始种码

在根目录新建一个app.html文件,在app目录下新建一个app.js文件(用于编写我们的js代码)。然后,把需要的内容引进app.html文件中,如下:

 

[html]
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  5.     <title>First App</title>  
  6.     <link rel="stylesheet" href="js/lib/sencha-touch.css" type="text/css">  
  7.     <link rel="stylesheet" href="css/style.css" type="text/css">  
  8.     <script type="text/javascript" src="js/lib/sencha-touch-debug.js"></script>  
  9.     <script type="text/javascript" src="app/app.js"></script>  
  10. </head>  
  11. <body></body>  
  12. </html>  
    
First App

1.打开 app/app.js文件,正式开始编写我们第一个Sencha Touch App了。今天我们利用Tab Panel来建立一个拥有四个页面的App。首先,我们先建立一个Tab Panel,在app.js里种入如下代码:

 

 

[javascript]
  1. Ext.application({  
  2.     name: 'Sencha',  
  3.   
  4.     launch: function() {
    // 应用启动时执行该方法   
  5.         Ext.create("Ext.tab.Panel", {  
  6.             fullscreen: true,  
  7.             items: [  
  8.                 {  
  9.                     title: 'Home',  
  10.                     iconCls: 'home',  
  11.                     html: 'Welcome'  
  12.                 }  
  13.             ]  
  14.         });  
  15.     }  
  16. });  
Ext.application({    name: 'Sencha',    launch: function() {// 应用启动时执行该方法        Ext.create("Ext.tab.Panel", {            fullscreen: true,            items: [                {                    title: 'Home',                    iconCls: 'home',                    html: 'Welcome'                }            ]        });    }});

 

保存后,可用支持HTML5的浏览器(我是chrome爱好者)打开app.html文件观看效果,如下

 

现在,我们来改进一下这个页面:

 

[javascript]
  1. launch: function() {  
  2.         Ext.create("Ext.tab.Panel", {  
  3.             fullscreen: true,  
  4.             tabBarPosition: 'bottom',  // 将标签栏定位到底部   
  5.   
  6.             items: [  
  7.                 {  
  8.                     title: 'Home',  
  9.                     iconCls: 'home',  
  10.                     cls: 'home',// 添加了css class   
  11.   
  12.                     html: [  
  13.                         '<img src="http://staging.sencha.com/img/sencha.png" />',  
  14.                         '<h1>Welcome to Sencha Touch</h1>',  
  15.                         "<p>You're creating the Getting Started app. This demonstrates how ",  
  16.                         "to use tabs, lists and forms to create a simple app</p>",  
  17.                         '<h2>Sencha Touch 2</h2>'  
  18.                     ].join("")  
  19.                 }  
  20.             ]  
  21.         });  
  22.     }  
  23. });  
launch: function() {        Ext.create("Ext.tab.Panel", {            fullscreen: true,            tabBarPosition: 'bottom',  // 将标签栏定位到底部            items: [                {                    title: 'Home',                    iconCls: 'home',                    cls: 'home',// 添加了css class                    html: [                        '',                        '

Welcome to Sencha Touch

', "

You're creating the Getting Started app. This demonstrates how ", "to use tabs, lists and forms to create a simple app

", '

Sencha Touch 2

' ].join("") } ] }); }});

 

打开css/style.css文件,输入:

 

[CSS]
  1. .home {
    text-align:center;}  
.home {text-align:center;}

然后,快快看看效果。

 

 

2.现在,让我们来建立第二个页面,blog页面。我们可以选择新建另一个js文件,然后修改app.html里面的引用;或者直接选择覆盖app.js:

 

[javascript]
  1. Ext.application({  
  2.     name: 'Sencha',  
  3.   
  4.     launch: function() {  
  5.         Ext.create("Ext.tab.Panel", {  
  6.             fullscreen: true,  
  7.             tabBarPosition: 'bottom',  
  8.   
  9.             items: [  
  10.                 {  
  11.                     xtype: 'nestedlist',// 这次建立一个嵌套列表(嵌套列表是什么,这里就不解释了)   
  12.                     title: 'Blog',  
  13.                     iconCls: 'star',  
  14.                     displayField: 'title',  
  15.   
  16.                     store: {
    // 这里是建立一个存放数据的data store,以后将对data store进行详细介绍   
  17.                         type: 'tree',  
  18.   
  19.                         fields: [  
  20.                             'title', 'link', 'author', 'contentSnippet', 'content',  
  21.                             {name: 'leaf', defaultValue: true}  
  22.                         ],  
  23.   
  24.                         root: {  
  25.                             leaf: false  
  26.                         },  
  27.   
  28.                         proxy: {
    // 我们使用ajax方式从google上获取一些blog的数据,通过jsonp作为传递的载体,所以要联网才能看到效果喔   
  29.                             type: 'jsonp',  
  30.                             url: 'https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://feeds.feedburner.com/SenchaBlog',  
  31.                             reader: {
    // 这个是读取数据的reader,数据取回来后通过reader转成可被js认识的数据对象,我们要教会reader如何读   
  32.                                 type: 'json',// 因为返回来的数据是json,我们要定义一个json reader   
  33.                                 rootProperty: 'responseData.feed.entries'  // 将数据里面的entries节点当作根节点去读取数据   
  34.                             }  
  35.                         }  
  36.                     },  
  37.   
  38.                     detailCard: {
    // 建立一个用于显示详细内容的panel   
  39.                         xtype: 'panel',  
  40.                         scrollable: true,  
  41.                         styleHtmlContent: true  
  42.                     },  
  43.   
  44.                     listeners: {
    // 这里是监听点击列表某一项后所执行的方法   
  45.                         itemtap: function(nestedList, list, index, element, post) {  
  46.                             this.getDetailCard().setHtml(post.get('content'));  
  47.                         }  
  48.                     }  
  49.                 }  
  50.             ]  
  51.         });  
  52.     }  
  53. });  
Ext.application({    name: 'Sencha',    launch: function() {        Ext.create("Ext.tab.Panel", {            fullscreen: true,            tabBarPosition: 'bottom',            items: [                {                    xtype: 'nestedlist',// 这次建立一个嵌套列表(嵌套列表是什么,这里就不解释了)                    title: 'Blog',                    iconCls: 'star',                    displayField: 'title',                    store: {// 这里是建立一个存放数据的data store,以后将对data store进行详细介绍                        type: 'tree',                        fields: [                            'title', 'link', 'author', 'contentSnippet', 'content',                            {name: 'leaf', defaultValue: true}                        ],                        root: {                            leaf: false                        },                        proxy: {// 我们使用ajax方式从google上获取一些blog的数据,通过jsonp作为传递的载体,所以要联网才能看到效果喔                            type: 'jsonp',                            url: 'https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://feeds.feedburner.com/SenchaBlog',                            reader: {// 这个是读取数据的reader,数据取回来后通过reader转成可被js认识的数据对象,我们要教会reader如何读                                type: 'json',// 因为返回来的数据是json,我们要定义一个json reader                                rootProperty: 'responseData.feed.entries'  // 将数据里面的entries节点当作根节点去读取数据                            }                        }                    },                    detailCard: {// 建立一个用于显示详细内容的panel                        xtype: 'panel',                        scrollable: true,                        styleHtmlContent: true                    },                    listeners: {// 这里是监听点击列表某一项后所执行的方法                        itemtap: function(nestedList, list, index, element, post) {                            this.getDetailCard().setHtml(post.get('content'));                        }                    }                }            ]        });    }});

种完没?一起来看看效果:

 

 

点击每一项后可以切换到详细内容页面。

 

3.完成了上面的工作,我们再来建立一个页面,Contact页面。种子如下,拿去种码吧:

 

[javascript]
  1. Ext.application({  
  2.     name: 'Sencha',  
  3.   
  4.     launch: function() {  
  5.         Ext.create("Ext.tab.Panel", {  
  6.             fullscreen: true,  
  7.             tabBarPosition: 'bottom',  
  8.   
  9.             items: [  
  10.                 {  
  11.                     title: 'Contact',  
  12.                     iconCls: 'user',  
  13.                     xtype: 'formpanel',// 这次建立的是form panel   
  14.                     url: 'contact.php',// 提交的action地址是contact.php。我们没有这个文件,所以,就不要提交了。   
  15.                     layout: 'vbox',  
  16.   
  17.                     items: [// 这里,我们有两个成员   
  18.                         {
    // 第一个成员是fieldset,将一些form元素包装起来。   
  19.                             xtype: 'fieldset',  
  20.                             title: 'Contact Us',  
  21.                             instructions: '(email address is optional)',  
  22.                             items: [  
  23.                                 {  
  24.                                     xtype: 'textfield',// input text   
  25.                                     label: 'Name'  
  26.                                 },  
  27.                                 {  
  28.                                     xtype: 'emailfield',// input email,html5添加进来的新成员   
  29.                                     label: 'Email'  
  30.                                 },  
  31.                                 {  
  32.                                     xtype: 'textareafield',// textarea   
  33.                                     label: 'Message'  
  34.                                 }  
  35.                             ]  
  36.                         },  
  37.                         {
    // 第二个成员,按钮   
  38.                             xtype: 'button',  
  39.                             text: 'Send',  
  40.                             ui: 'confirm',  
  41.                             handler: function() {  
  42.                                 this.up('formpanel').submit();// 处理点击事件的方法   
  43.                             }  
  44.                         }  
  45.                     ]  
  46.                 }  
  47.             ]  
  48.         });  
  49.     }  
  50. });  
Ext.application({    name: 'Sencha',    launch: function() {        Ext.create("Ext.tab.Panel", {            fullscreen: true,            tabBarPosition: 'bottom',            items: [                {                    title: 'Contact',                    iconCls: 'user',                    xtype: 'formpanel',// 这次建立的是form panel                    url: 'contact.php',// 提交的action地址是contact.php。我们没有这个文件,所以,就不要提交了。                    layout: 'vbox',                    items: [// 这里,我们有两个成员                        {// 第一个成员是fieldset,将一些form元素包装起来。                            xtype: 'fieldset',                            title: 'Contact Us',                            instructions: '(email address is optional)',                            items: [                                {                                    xtype: 'textfield',// input text                                    label: 'Name'                                },                                {                                    xtype: 'emailfield',// input email,html5添加进来的新成员                                    label: 'Email'                                },                                {                                    xtype: 'textareafield',// textarea                                    label: 'Message'                                }                            ]                        },                        {// 第二个成员,按钮                            xtype: 'button',                            text: 'Send',                            ui: 'confirm',                            handler: function() {                                this.up('formpanel').submit();// 处理点击事件的方法                            }                        }                    ]                }            ]        });    }});

然后,上图看真相:

 

 

4.合并。

三个栏目四个页面大家都建立过了,也体验过效果。可是,我们不是做一个app吗?这样怎么算一个。好了,现在我们将它们合并起来。

 

[javascript]
  1. Ext.application({  
  2.     name: 'Sencha',  
  3.   
  4.     launch: function() {  
  5.         Ext.create("Ext.tab.Panel", {  
  6.             fullscreen: true,  
  7.             tabBarPosition: 'bottom',  
  8.   
  9.             items: [// 这次,我们将三个栏目当成三个Tab Panel的成员   
  10.                 {
    // 第一个成员,home页面   
  11.                     title: 'Home',  
  12.                     iconCls: 'home',  
  13.                     cls: 'home',  
  14.                     html: [  
  15.                         '<img width="65%" src="http://staging.sencha.com/img/sencha.png" />',  
  16.                         '<h1>Welcome to Sencha Touch</h1>',  
  17.                         "<p>You're creating the Getting Started app. This demonstrates how ",  
  18.                         "to use tabs, lists and forms to create a simple app</p>",  
  19.                         '<h2>Sencha Touch 2</h2>'  
  20.                     ].join("")  
  21.                 },  
  22.                 {
    // 第二个成员,blog页面   
  23.                     xtype: 'nestedlist',  
  24.                     title: 'Blog',  
  25.                     iconCls: 'star',  
  26.                     displayField: 'title',  
  27.   
  28.                     store: {  
  29.                         type: 'tree',  
  30.   
  31.                         fields: [  
  32.                             'title', 'link', 'author', 'contentSnippet', 'content',  
  33.                             {name: 'leaf', defaultValue: true}  
  34.                         ],  
  35.   
  36.                         root: {  
  37.                             leaf: false  
  38.                         },  
  39.   
  40.                         proxy: {  
  41.                             type: 'jsonp',  
  42.                             url: 'https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://feeds.feedburner.com/SenchaBlog',  
  43.                             reader: {  
  44.                                 type: 'json',  
  45.                                 rootProperty: 'responseData.feed.entries'  
  46.                             }  
  47.                         }  
  48.                     },  
  49.   
  50.                     detailCard: {  
  51.                         xtype: 'panel',  
  52.                         scrollable: true,  
  53.                         styleHtmlContent: true  
  54.                     },  
  55.   
  56.                     listeners: {  
  57.                         itemtap: function(nestedList, list, index, element, post) {  
  58.                             this.getDetailCard().setHtml(post.get('content'));  
  59.                         }  
  60.                     }  
  61.                 },  
  62.                 {
    // 第三个成员,Contact页面   
  63.                     title: 'Contact',  
  64.                     iconCls: 'user',  
  65.                     xtype: 'formpanel',  
  66.                     url: 'contact.php',  
  67.                     layout: 'vbox',  
  68.   
  69.                     items: [  
  70.                         {  
  71.                             xtype: 'fieldset',  
  72.                             title: 'Contact Us',  
  73.                             instructions: '(email address is optional)',  
  74.                             items: [  
  75.                                 {  
  76.                                     xtype: 'textfield',  
  77.                                     label: 'Name'  
  78.                                 },  
  79.                                 {  
  80.                                     xtype: 'emailfield',  
  81.                                     label: 'Email'  
  82.                                 },  
  83.                                 {  
  84.                                     xtype: 'textareafield',  
  85.                                     label: 'Message'  
  86.                                 }  
  87.                             ]  
  88.                         },  
  89.                         {  
  90.                             xtype: 'button',  
  91.                             text: 'Send',  
  92.                             ui: 'confirm',  
  93.                             handler: function() {  
  94.                                 this.up('formpanel').submit();  
  95.                             }  
  96.                         }  
  97.                     ]  
  98.                 }  
  99.             ]  
  100.         });  
  101.     }  
  102. });  
Ext.application({    name: 'Sencha',    launch: function() {        Ext.create("Ext.tab.Panel", {            fullscreen: true,            tabBarPosition: 'bottom',            items: [// 这次,我们将三个栏目当成三个Tab Panel的成员                {// 第一个成员,home页面                    title: 'Home',                    iconCls: 'home',                    cls: 'home',                    html: [                        '',                        '

Welcome to Sencha Touch

', "

You're creating the Getting Started app. This demonstrates how ", "to use tabs, lists and forms to create a simple app

", '

Sencha Touch 2

' ].join("") }, {// 第二个成员,blog页面 xtype: 'nestedlist', title: 'Blog', iconCls: 'star', displayField: 'title', store: { type: 'tree', fields: [ 'title', 'link', 'author', 'contentSnippet', 'content', {name: 'leaf', defaultValue: true} ], root: { leaf: false }, proxy: { type: 'jsonp', url: 'https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://feeds.feedburner.com/SenchaBlog', reader: { type: 'json', rootProperty: 'responseData.feed.entries' } } }, detailCard: { xtype: 'panel', scrollable: true, styleHtmlContent: true }, listeners: { itemtap: function(nestedList, list, index, element, post) { this.getDetailCard().setHtml(post.get('content')); } } }, {// 第三个成员,Contact页面 title: 'Contact', iconCls: 'user', xtype: 'formpanel', url: 'contact.php', layout: 'vbox', items: [ { xtype: 'fieldset', title: 'Contact Us', instructions: '(email address is optional)', items: [ { xtype: 'textfield', label: 'Name' }, { xtype: 'emailfield', label: 'Email' }, { xtype: 'textareafield', label: 'Message' } ] }, { xtype: 'button', text: 'Send', ui: 'confirm', handler: function() { this.up('formpanel').submit(); } } ] } ] }); }});

赶快把程序跑起来,查看一下图果吧。看是不是和下图一样?

 

 

这样,我们很快就建立了一个基于HTML5的 Web App了。是不是很简单?我们甚至可以用PhoneGap将它打包成 android或者iOS应用,发布到各自的应用商店去。至于PhoneGap,不在我们的讨论范围,在这里就不再详谈了。这次就介绍到这里。之后,我会给大家介绍Sencha Touch 2的详细内容。

转载地址:http://okiso.baihongyu.com/

你可能感兴趣的文章
C#加密算法总结
查看>>
过程 线 多线程 并发 同步异步
查看>>
关于建立时间和保持时间(转)
查看>>
python django模型内部类meta详细解释
查看>>
python命令行参数处理
查看>>
hdu 1814 Peaceful Commission (2-sat 输出字典序最小的路径)
查看>>
取消svn版本控制
查看>>
android app多渠道分发打包
查看>>
A熟知SP.NET---WebForms UnobtrusiveValidationMode 必须“jquery”ScriptResourceMapping。
查看>>
数据结构Java实现05----栈:顺序栈和链式堆栈
查看>>
Codeforces Round #319 (Div. 1) C. Points on Plane 分块
查看>>
Redis源代码分析(二十七)--- rio制I/O包裹
查看>>
STM32电源管理
查看>>
Android音频输入通道的底层硬件和软件开发分析
查看>>
php中利用array_filter过滤数组为空值
查看>>
Linux1:Linux概述
查看>>
Promise 学习笔记 - 时间支配者
查看>>
Lintcode: Sqrt(X)
查看>>
Jmeter 新手
查看>>
iOS之UI--关于modal
查看>>