用 Sencha Touch 構建移動 web 應用程序

Sencha Touch 是一個使用 HTML五、CSS3 和 JavaScript 語言構建的移動 web 應用程序框架,在本文中,學習如何應用您當前的 web 開發技能進行移動 web 開發。下載和創建 Sencha Touch,經過一個樣例應用程序探究基本原理。學習開始使用 Sencha Touch 框架所需的一切javascript

 

概述

在軟件開發領域中,有兩個重要的趨勢愈來愈重要:移動應用程序開發和基於標準的 HTML5 web 開發。任何類型開發的學習過程都是艱苦的。開發一個本地移動應用程序一般須要特定平臺和技術知識,好比,用於 iPhone 的 Objective-C,用於 Android 的 Java™(這只是兩個平臺)。HTML5 開發近期日漸流行,由於它是基於標準的。雖然供應商正在迅速地融入並遵照這些早期的規範,但 HTML5 還不是很成熟。html

近期發佈的 Sencha Touch 1.0 融合了移動應用程序開發領域尖端技術和 web 開發,造成了一個簡單的、易於理解的框架用於構建移動 web 應用程序。在本文中,您將學習開始使用 Sencha Touch 框架所需的一切。html5


Sencha Touch

學習構建移動應用程序 — 特別是從一個 web 開發人員的角度 — 可能比較麻煩。各類平臺可供挑選,各類技術可供學習。HTML5 支持,儘管發展勢頭迅速上升,但仍然沒有準備好用於複雜的 Web 應用程序,特別是業務線應用程序。 android

常見縮略詞

Ajax:異步 JavaScript 和 XML
API:應用程序編程接口
CSS:層疊樣式表
HTML:超文本標記語言
JSON:JavaScript 對象符號
SDK:軟件開發工具包
UI:用戶界面web

Sencha Touch 將豐富的 HTML5 平臺和移動 web 應用程序開發結合造成一個折中方案。這個框架是開發人員友好的,相似於使用 Ext JS JavaScript 框架。若是您擁有中高級 JavaScript 水平,那麼掌握 Sencha Touch 是可能的。若是您已擁有做爲 JavaScript 和 CSS 開發人員的技能,那麼 Sencha Touch 會當即將您變成一個移動應用程序開發人員。chrome

Sencha 是一家擁有核心商業產品的公司,可是也支持開源軟件。 Sencha Touch 1.0 對我的和商業用途都是免費的。編程

平臺支持

Sencha Touch 目前支持 WebKit 瀏覽器,包括流行的 Apple iOS 和 Google Androidis 平臺。有些人可能會認爲這種支持不夠 — 全部平臺必須重視對 Sencha Touch 的支持。在移動 web 開發領域中選擇一個框架時,明智的作法是注重兩點:平臺的豐富性和特性的豐富性。須要這樣一種框架:可以以對開發人員友好的方式從 HTML5/CSS3 提取最多內容且具備普遍的影響力。在這方面,Sencha 比較精明,支持兩種最流行的平臺並使用它們的資源來爲開發人員提供豐富的、易於使用的特性。 api

您須要知道的事

要開始使用 Sencha Touch,您須要瞭解 JavaScript 語言和 CSS 的工做原理。如前所述,此框架提取許多特性和樣式,不然您一般須要從頭開始組裝。

若是您想更進一步研究,或者想要構建屬於本身的自定義組件,或者修改您本身的品牌樣式,則須要更高級的 HTML5 和 CSS3 技能。更多信息,見 參考資料 部分。

準備開始

開始使用 Sencha Touch:

  1. 從 Sencha 下載框架。(見 參考資料。)
  2. 將內容解壓到開發網站的根目錄下。

    爲解壓文件夾重命名一個通用名稱,好比,sencha-touch,這樣對於未來的新版框架,您也可使用相同的文件夾名,而不須要更新引用框架的其餘文件。

  3. 使用一個 WebKit 瀏覽器,好比 Google Chrome,打開示例頁 http://localhost/sencha-touch/examples/。雖然您的環境可能略有不一樣,但您也應該能夠看到相似 圖 1 的界面。
圖 1. Sencha Touch 示例
Sencha Touch 示例頁面截圖

經過構建一個 Sencha Touch 應用程序研究框架特性。

  1. 使用 清單 1 中的源代碼,在您網站的根目錄下建立一個新 HTML 文件 index.html。
    清單 1. 樣例 HTML5 文檔
    <!DOCTYPE HTML>
    <html>
    <head>
    <title>Touch Test</title>
    </head>
    
    <body>
    </body>
    </html>

    一旦您建立了那個文件,您就正式成爲一名 HTML 開發人員了。頂部的 <!DOCTYPE HTML> 文檔類型申明是關鍵,它確保文檔被解析爲 HTML5。

  2. 修改清單 1 中的代碼,如 清單 2 所示。
    清單 2. 安裝 Sencha Touch 腳本和樣式
    <!DOCTYPE HTML>
    <html>
    <head>
    <title>Touch Test</title>
    
    <!-- sencha touch css -->
    <link rel="stylesheet" type="text/css"
               href="sencha-touch/resources/css/sencha-touch-debug.css" />
    
    <!-- sencha touch javascript -->
    <script type="text/javascript" src="sencha-touch/sencha-touch-debug.js"></script>
    
    </head>
    
    <body>
    </body>
    </html>

    上述代碼爲 Sencha Touch 框架添加了 CSS 和 JavaScript 文件。您掛鉤的是這些文件的調試版本,這推薦做爲開發使用,由於它們會生成更好的錯誤消息。要部署,只需換成縮小本的調試版本。您也能夠添加您的自定義 CSS 文件和 JavaScript 文件來構建您的應用程序。

  3. 要保持示例的簡潔性,請包含一些嵌入的 JavaScript 代碼。從修改您的代碼開始,相似 清單 3
    清單 3. 最簡單的 Sencha Touch 應用程序
    <!DOCTYPE HTML>
    <html>
    <head>
    <title>Touch Test</title>
    
    <!-- sencha touch css -->
    <link rel="stylesheet" type="text/css"
               href="sencha-touch/resources/css/sencha-touch-debug.css" />
    
    <!-- sencha touch javascript -->
    <script type="text/javascript" src="sencha-touch/sencha-touch-debug.js"></script>
    
    <!-- application script -->
    <script type="text/javascript">
        Ext.setup( {
            onReady: function() {
                // create the root panel
                new Ext.Panel({
                    fullscreen: true,
                    html: "Sencha Touch is ready!"
                });
            }
        });
    </script>
    
    </head>
    
    <body>
    </body>
    </html>
  4. 在 Google Chrome 運行頁面,您應該能夠看到相似 圖 2 的界面。
    圖 2. 最簡單的 Sencha Touch 應用程序
    執行清單 3 代碼的輸出,顯示 Sencha Touch 已準備好了!

Ext.setup

其餘幾個有用的 Ext.setup 配置選項函數也可使用;參閱 API 文檔獲取更多詳情,在您的 Sencha Touch 安裝目錄的 docs 文件夾中能夠找到。

清單 3 中的代碼介紹了一個 JavaScript 代碼塊,您可用於整篇文章來探索框架特性。若是您使用了 Ext JS,這個代碼多是熟悉的。Ext.setup 函數是您的 Sencha Touch 應用程序的起點。它接受一個對象以及一些配置選項。示例使用 onReady 選項,當文檔準備好時,它將運行一個函數來。onReady 函數建立應用程序的根面板。根面板分別使用 fullscreenhtml 選項,佔用全部可用空間以及包含一個簡單字符串。

在 Android 模擬器中運行應用程序

到目前爲止,您已經使用 Google Chrome 瀏覽器完成了開發。這是一個很好的方法,特別是在處理 JavaScript 和 CSS bug 時。使用一個設備模擬器來啓動應用程序測試。本小節展現如何安裝一個 Android 模擬器。

  1. 爲您的操做系統平臺 下載 最新 Android SDK,而後將其解壓到磁盤。

    SDK 包括獲取和運行一個模擬器所須要的全部工具,可是還有一些步驟也是必要的。

  2. Android 模擬器須要您建立一個 Android Virtual Device (AVD),這是實際建模一個 Android 驅動設備的基礎配置選項。要建立一個 AVD,在 Android SDK 的工具文件夾下運行 android 實用函數。

    Android SDK 和 AVD Manager 應該打開,相似 圖 3

    圖 3. Android SDK 和 AVD Manager
    Android SDK 和 AVD Manager 屏幕截圖,用於安裝附加包和管理虛擬設備

在這裏,若是您想要建立一個新虛擬設備,使用 New… 按鈕,注意一下一個標記爲 Target 的字段,這是禁用的,在您建立一個新虛擬設備以前,下載附屬包到 SDK。

  1. 從左邊菜單欄選擇 Available Packages
  2. 擴展您的網站 https://dl-ssl.google.com/android/repository/repository.xml 來檢索可供安裝的工具包列表。
  3. 選擇最新 SDK 平臺,如 圖 4 所示,而後單擊 Install Selected
    圖 4. 可供 Android SDK 使用的數據包
    Android SDK 可用數據包列表,可經過 Android SDK 和 AVD Manager 安裝
  4. 在下一個窗口單擊 Install 按鈕,接受安裝。
  5. 下載和完成後,單擊 Close

您剛剛爲您想建立的 AVD 安裝了一個潛在目標,這個目標是一個運行在版本 2.2 上的 Android 設備,下一步是建立 AVD。

  1. 從 AVD Manager 左邊的按鈕選擇 Virtual Devices,單後單擊 New…
  2. 輸入 sencha-avd 做爲 Name,而後選擇您剛剛安裝的 Android 2.2 目標做爲 Target。其餘所有保持默認設置。
  3. 單擊 Create AVD

    在確認窗口單擊 OK,而後關閉 AVD Manager。

如今您所須要的是在您本地開發環境中運行一個模擬器。要運行模擬器:打開一個終端窗口,將路徑修改成 Android SDK 的安裝根目錄,而後輸入 清單 4 中的命令。

清單 4. 調用 Android 模擬器
tools/emulator -avd sencha-avd

您能夠在 Android 模擬器中使用 web 瀏覽器來瀏覽您在 http://localhost/ 下的測試應用程序,可是您將獲得一個很大的 404 錯誤,這是由於在模擬器中應用 localhost127.0.0.1 其實是在模擬器自己環境中。爲了引用您的部署環境,使用地址 10.0.2.2,生成 圖 5 所示界面。

圖 5. 在 Android 模擬器中運行的示例
在 Android 模擬器中運行清單 3 所定義的示例的屏幕截圖,顯示 Sencha Touch 已經準備好了!

Sencha Touch UI 組件概覽

如今您對基本原理有所瞭解,這部分通覽了一些 Sencha Touch UI 組件。

按鈕

您能夠經過使用一些配置選項建立許多按鈕樣式。清單 5 中的代碼建立了一系列垂直排列的全部可用按鈕。示例應用程序延伸出一組添加到根面板的條目 — 在本例中,是一個面板和一個系列垂直排列的按鈕。

按鈕根據 ui 配置選項進行樣式化。支持的按鈕類型是 normalbackroundactionforward

清單 5. 按鈕
<script type="text/javascript">
  Ext.setup( {
    onReady: function() {
      // create the root panel
      new Ext.Panel({
        fullscreen: true,
        items: [
          // add a panel to the root panel
          // this will contain a vertical layout of buttons
          { 
            xtype: "panel",
            layout: "vbox",
            items: [
              {
                xtype: "button",
                ui: "normal",
                text: "Normal"  
              },
              {
                xtype: "button",
                ui: "back",
                text: "Back"  
              },
              {
                xtype: "button",
                ui: "round",
                text: "Round"  
              },
              {
                xtype: "button",
                ui: "action",
                text: "Action"  
              },
              {
                xtype: "button",
                ui: "forward",
                text: "Forward"  
              }
            ]  
          }
        ]
      });
    }
  });
</script>

圖 6 顯示了生成結果

圖 6. Sencha Touch 中提供的按鈕樣式
執行清單 5 所示代碼的的屏幕截圖,顯示提供的全部按鈕樣式

表單

表單套件包含全部常見功能和其餘功能。很明顯,表單套件處理和整合了 HTML5 特有函數。支持 HTML5 中的字段類型(好比,電子郵件、web 地址和時間選擇器)和屬性(好比,佔位符文本);Sencha Touch 只不過讓它們更容易使用。清單 6 顯示了一些特性。

清單 6. 表單控件樣例
<script type="text/javascript">
  Ext.setup( {
    onReady: function() {
      // create the root panel
      new Ext.Panel({
        fullscreen: true,
        items: [
          // add a panel to the root panel
          { 
            xtype: "form",
            items: [
              {
                xtype: "textfield",
                name: "name",
                label: "Name",
                placeHolder: "your name here"  
              },
              {
                xtype: "emailfield",
                name: "email",
                label: "Email",
                placeHolder: "you@example.com"  
              },
              {
                xtype: "urlfield",
                name: "url",
                label: "Url",
                placeHolder: "http://www.example.com"  
              },
              {
                xtype: "datepickerfield",
                name: "date",
                label: "Date",
                picker: { yearFrom: 2010 }  
              }
            ]  
          }
        ]
      });
    }
  });
</script>

運行清單 6 中的表單能夠生成相似 圖 7 的界面。 Date 字段得到焦點,底部顯示時間選擇器。

圖 7. 可用表單字段樣例
可用表單字段樣例屏幕截圖

列表

開發移動 web 應用程序時,您可使用有限的基本面板。對基於列表的 UI 組件的支持變得很重要。Sencha Touch 配備有各類列表的支持,包括簡單的、組合的和嵌套的。圖 8 是框架下載中的 Kitchen Sink 演示的一個屏幕截圖,展現了一個組合列表。列表右邊垂直排列的字符公開了一個有用的方法,能夠直接跳到列表特定部分。

圖 8. Kitchen Sink 演示中的一個組合列表
Kitchen Sink 演示中組合列表屏幕截圖

圖標和工具欄

Sencha Touch 附帶一個使人震撼的內置圖標庫,當即可用。您所須要作的只是指定一個字符串表明一個您想要的圖標的 CSS 類。清單 7 顯示如何構建兩個工具欄:一個位於根面板頂部,一個位於底部。每一個工具欄配置了一個小的開箱即用的圖標樣例。

此框架還提供更多可用圖標,查看 API 文檔和示例獲取更多信息。

清單 7. 工具欄中的圖標
<script type="text/javascript">
  Ext.setup( {
    onReady: function() {
      // create the root panel
      new Ext.Panel({
        fullscreen: true,
        dockedItems: [
          {
            xtype: "toolbar",
            dock: "top",
            items: [
              {
                iconMask: true,
                ui: "plain",
                iconCls: "add"
              },
              {
                iconMask: true,
                ui: "plain",
                iconCls: "delete"
              },
              {
                iconMask: true,
                ui: "plain",
                iconCls: "star"
              },
              {
                iconMask: true,
                ui: "plain",
                iconCls: "home"
              }
            ]
          },
          {
            xtype: "toolbar",
            dock: "bottom",
            items: [
              {
                iconMask: true,
                iconCls: "download"
              },
              {
                iconMask: true,
                iconCls: "favorites"
              },
              {
                iconMask: true,
                iconCls: "search"
              },
              {
                iconMask: true,
                iconCls: "user"
              }
            ]  
          }
        ]
      });
    }
  });
</script>

運行清單 7 中的代碼以後,您能夠看到相似 圖 9 的界面。

圖 9. 圖標和樣式樣例
框架中開箱即用的圖標和樣式樣例屏幕截圖

幻燈效果和選項卡

幻燈效果和選項卡易於實現,經過使用探討過的編碼模式。清單 8 顯示了一個有標籤的界面和一個 carousel.

清單 8. 構造幻燈效果和選項卡
<script type="text/javascript">
  Ext.setup( {
    onReady: function() {
      // create the root panel
      new Ext.TabPanel({
        fullscreen: true,
        items: [
          {
            title: "Tab 1",
            html: "First tab"  
          },
          {
            title: "Tab 2",
            html: "Second tab"  
          },
          {
            title: "Tab 3",
            html: "Third tab"  
          }
        ]
      });
    }
  });
</script>

<script type="text/javascript">
  Ext.setup( {
    onReady: function() {
      // create the root panel
      new Ext.Carousel({
        fullscreen: true,
        items: [
          {
            html: "First item"  
          },
          {
            html: "Second item"  
          },
          {
            html: "Third item"  
          }
        ]
      });
    }
  });
</script>

幻燈效果和選項卡相似於代碼和函數。幻燈效果在卡之間移動,能夠經過一個滑動動做從一邊滑到另外一邊,也能夠單擊一個位於底部的環形圖標。默認狀況下,這兩個控件均可以使用一個滑動動畫在卡之間切換。

圖 10 顯示了選項卡界面。

圖 10. 樣例選項卡界面
清單 8 中定義的選項卡界面屏幕截圖

圖 11 顯示了 carousel 界面。

圖 11. 樣例幻燈效果界面
清單 8 中定義的樣例 carousel 界面屏幕截圖

覆蓋

您可使用幾個覆蓋控件。您的選擇包括標準提示、確認和提示控件,以及普通模態控件。

地圖

在移動 web 開發中,最重要的一個組件就是地圖。Sencha Touch 使得在您的應用程序中包含一個地圖變得很容易,使用 Ext.Map 組件便可。清單 9 顯示瞭如何在樣例應用程序中包含一個地圖,記住包含 Google Maps API 的 JavaScript 文件,可以使該樣例運行。

清單 9. 使用地圖
<!DOCTYPE HTML>
<html>
<head>
<title>Touch Test</title>

<!-- sencha touch css -->
<link rel="stylesheet" type="text/css"
         href="sencha-touch/resources/css/sencha-touch-debug.css" />

<!-- Google Maps API -->
<script type="text/javascript"
              src="http://maps.google.com/maps/api/js?sensor=true"></script>

<!-- sencha touch javascript -->
<script type="text/javascript" src="sencha-touch/sencha-touch-debug.js"></script>

<!-- application script -->
<script type="text/javascript">
  Ext.setup( {
    onReady: function() {
      // create the root panel
      new Ext.Panel({
        fullscreen: true,
        items: [
          {
            xtype: "map"  
          }
        ]
      });
    }
  });
</script>

</head>

<body>
</body>
</html>

生成的地圖窗口如 圖 12 所示。

圖 12. 地圖控件示例
使用清單 9 中的代碼生成示例地圖的屏幕截圖

事件和數據訪問

Sencha Touch 支持幾個您在移動應用程序中指望的關鍵事件,好比觸摸開始/結束(touch start/end)、滾動開始/結束(scroll start/end)、敲擊(tap)、雙擊(double tap)、滑指(swipe)和按壓(pinch)。數據訪問看起來像過去 Ext JS 所作的。

Sencha Touch 框架支持 JSON with padding (JSONP)、Yahoo! 查詢語言和 Ajax 請求。與 Sencha Touch 數據包集合,它們提供一個靈活的機制來將數據綁定到您的 UI 組件上。

樣式和設計

建立您本身的主題多是一個相對比較難的任務。Sencha Touch 框架擁有關鍵特性,使得修改默認樣式和設計變得更爲容易。

框架使用 Syntactically Awesome Stylesheets (Sass),這是 CSS3 的一個擴展,容許您使用變量和選擇遺傳性向主題開發添加更多的威力。更改單個變量可能會影響整個主題 — 就這麼簡單。

建立一個新主題不在本文範圍以內。參考資料 有幾個連接可幫助您開始。

結束語

本文提供了 Sencha Touch 的一個簡介,它是一個使用 HTML五、CSS3 和 JavaScript 構建的移動 web 應用程序框架。您學習瞭如何建立一個簡單 Sencha Touch 應用程序,以及如何使用一個設備虛擬器進行測試。您還探索了一些 UI 組件。

本文只是對 Sencha Touch 框架的一個簡單介紹。如今您已經掌握了基礎知識,能夠考慮經過如下 參考資料 進一步研究相關概念。

參考資料

學習

得到產品和技術

討論

相關文章
相關標籤/搜索