跟我一起玩轉Sencha Touch 移動 WebApp 開發(一)
1.目錄
- 移動框架簡介,為什麼選擇Sencha Touch?
- 環境搭建
- 建立專案框架,框架檔案簡介
- 建立簡單Tabpanel案例
- 自定義圖示的方式
- WebApp產品測試和釋出
- HTML5離線快取
- 釋出成Android/IOS本地app應用
移動框架簡介,為什麼選擇Sencha Touch?
目前市面上,移動應用web框架,也算是風生水起,不斷湧現,各個都稱自己最牛逼。常見的幾個框架主要有jquery Mobile,Dojo Moble,Sencha Touch,我這裡是極端推薦Sencha Touch,至於它多優秀,不是我說了算,只有你親自用過,做過專案之後才能領悟他的魅力;至於從沒用過的口水黨,請繞道。
Sencha Touch是使用HTML5,CSS3和JavaScript來實現的,它可以在Android、IOS、WP、黑莓平臺上使用,也可以在其他帶有HTML5相容的Web瀏覽器的平臺上使用。更多詳細介紹可以到官方閱讀http://www.sencha.com/products/touch/,這裡不羅嗦。
至於我為什麼選擇Sencha Touch,理由有如下幾點:
- Sencha 旗下的產品,如果你熟練Extjs,幾乎是零學習成本,平滑過渡到Touch開發,Sencha是一個非常活躍的組織,技術更新和支援都有很好的保障,世界財富100強裡,50%都在用他們的產品
- 完美支援各大移動平臺Android、IOS、WP、BlackBerry等,同時可以執行在任何HTML5相容或以webkit為核心的瀏覽器上(chrome,safari,360|搜狗極速模式)等,一次編寫,n次複用
- 採用超強的cmd壓縮、Html5快取和over-the-air技術,離線訪問,解決您對流量的擔憂
- 完美支援本地打包,一行命令即可將整個WebAPP打包成為NativeApp,非常方便,不需做任何變更(令我震驚的是可以直接通過ajax訪問遠端的服務沒有跨域問題)
- MVC開發模式,充分解耦,層次分明
- 針對不同平臺,區別對待,一個app,phone和tablet兩種展現
- 便捷的Sencha Cmd命令工具,類似ruby的命令列,輔助開發
- 豐富的報表控制元件
- 業界最完備、精緻的API文件,豐富的學習資料,幾乎一看就懂,強大的forum支援
- 穩定性、JSONP、相容性等小細節,堪稱完美
- 等。
- 更多介紹請看API:http://docs.sencha.com/touch/2.2.1/
環境搭建
1.下載sencha Touch SDK包http://www.sencha.com/products/touch/download/
2.確認本機安裝了jdk1.6+,1.7最好
3.Ruby1.9.3或者更早的版本,但一定不能安裝2.0的,下載地址:http://rubyinstaller.org/downloads/
4.android-sdk-tools,如果你不想打包成nativeApp,可以不用下載
5.Sencha Cmd 下載地址:http://www.sencha.com/products/sencha-cmd/download
6.注意將jdk,ruby,sencha cmd都新增到環境變數
Sencha Cmd 能幹什麼?詳見:http://docs.sencha.com/touch/2.2.1/#!/guide/command
建立專案框架
ok,環境搭建完畢,下面我們通過sencha cmd(一下簡稱cmd)的一行命令建立專案框架
# 首先確認進入到了sencha-touch-2-sdkcd /path/to/sencha-touch-2-sdksencha generate app MyApp /path/to/www/myapp
ok,很簡單我們生成了自己的專案架構,以後所有的開發都在這個專案架構中開發。
框架檔案簡介
.sencha:cmd命令執行的一些配置引數
app:整個專案
resources:專案的資原始檔,包括css,images,icons[app圖示],startup[啟動閃屏圖片]
touch:touch的核心包,原始檔,資原始檔等
app.js:整個專案的入口,配置了需要載入那些js檔案等等
index.html:app啟動頁面
這裡需要重點講下app.json檔案和packager.json檔案
從st2.x開始,專案啟動時候載入的js,css等並不像以前一樣全都寫在index.html,而是通過app.json配置的形式來動態載入
st2.x的啟動載入方式有多種,你可以參考http://www.cnblogs.com/dowinning/archive/2012/03/23/2413071.html
之所以保持官方這種方式,是因為後期我們可以直接通過cmd命令對專案壓縮釋出,或者打包等,如果破壞了目錄結構,cmd將無法執行。
更詳細介紹請看官網:http://docs.sencha.com/touch/2.2.1/#!/guide/command_app
app.json淺析
通過IIS或者VS的IIS Express可能無法載入該MIME型別,需要手工配置MIMEhttp://www.cnblogs.com/qidian10/p/3289816.html
View Codeapp.json檔案中注意js部分,預設開發的時候採用的是sencha.js,這將導致整個app載入js的時候都是載入st的原始碼檔案,速度會非常慢,這裡我改成sencha-all.js檔案,直接載入他編譯好的包,效率將大大提升
packager.json該檔案是為了app打包用的,等到專案釋出的部分再解析
建立簡單Tabpanel案例
我們開啟app資料夾,在view裡面新增如下檔案:
各個部分程式碼如下:
app.js app/view/Main.js app/view/favorite/Main.js其他資料夾的main檔案和favorite的類似,只需要改下標題和iconCls即可,下載地址:http://files.cnblogs.com/qidian10/view.rar
當然這些view、store、model、controller檔案,你完全可以通過cmd命令建立
cd /path/to/www/myappsencha generate model User id:int,name,email
如果知道命令引數,直接輸入:sencha generate model
ok,建立完成這些檔案,你應該可以看到自己的介面了,但遺憾的是估計你看不到你的圖示iconCls的圖示,應為有兩個圖示是我自定義的。
SenchaTouch裡如何使用自己定義的圖示也是一門很大的學問,ST採用sass技術,圖示在2.2裡面全部改成了字型的形式,也就是你看到的圖示其實是一個字型(例如A)
自定義圖示的方式
那麼如何在Sencha Touch 2.2 裡自定義icon圖示呢?提供一種簡單方法http://www.cnblogs.com/qidian10/p/3292669.html
學會自定義icon後,將需要的icon,CSS加入到app.json的css塊中
WebApp產品測試和釋出
ok,不出意外,現在一個完整的demo應用已經展現在你面前了。
到目前為止,如果你不嫌費流量和載入效率的話,其實一個應用已經完成了,你可以直接用了。
但是Sencha給我們提供了更加優秀的app釋出方式,可以直接將專案中需要的資源壓縮打包,進行html5的離線快取,這樣,我們的應用程式在第一次載入完成後,在離線情況下也是可以使用的(資料訪問除外)
Sencha給我們提供了4種釋出方式
- testing:供測試,QA使用版本
- package:脫離web server,本地html檔案資源包
- production:正是釋出的webapp產品
- native:打包成android apk,或者ios app本地安裝檔案
我們只需要在cmd裡,執行一行命令即可釋出我們的產品:
#production,testing,native,package#進入到你的通過cmd生成的MyApp資料夾中sencha app build production
ok,專案成功build,你可到MyApp/build/MyApp/Production中看生成的檔案,你直接打index.html你會發現瞬間app就打開了,因為cmd幫我們做了壓縮工作,所有的css,js都壓縮了,而且app的mvc核心檔案都打包壓縮到app.js裡,減少了請求次數。
HTML5離線快取
如果你將已釋出好的app,放到remote server上,第一次開啟index.html,然後切斷網路,再次重新整理index.html你會發現仍然可以顯示。原因就是他採用了html5的離線快取技術
Sencha Touch App每次開啟都會檢查伺服器是否有變動,如果有變動,會自動觸發app.js裡的onUpdated方法,提醒使用者更新
如果HTML5離線快取小白的同學,趕緊補課:http://www.cnblogs.com/qidian10/p/3292876.html
哦對了,這裡還需要新增MIME型別以支援html5的快取變更檔案cache.appcache,application/cache-manifest
釋出成Android/IOS本地app應用
如果你覺得采用webapp的方式,仍然不夠理想,那麼可以用st的另一把利器,打包Sencha Touch webapp為本地native app
這裡介紹如何將Sencha Touch 打包為Android的apk
首先確認安裝了android-sdk-tools,jdk,下面開始本節的最後一個內容:
1.生成android證書
簡單起見,我們將私鑰倉庫(keystore)建立在X:/目錄,將私鑰倉庫(keystore),別名(alias) 和密碼(password)都設為"hzyapp"。
$ keytool -genkey -v -keystore hzyapp.keystore -alias hzyapp -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password: (I entered "hzyapp")What is your first and last name? [Unknown]: jack chenWhat is the name of your organizational unit? [Unknown]: itWhat is the name of your organization? [Unknown]: hzyWhat is the name of your City or Locality? [Unknown]: jiaxingWhat is the name of your State or Province? [Unknown]: zhejiangWhat is the two-letter country code for this unit? [Unknown]: CNIs CN=Patrick Chu, OU=Training, O=Sencha, L=Redwood City, ST=California, C=US correct? [no]: yGenerating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10,000 days for: CN=jack chen, OU=it, O=hzy, L=jiaxing, ST=zhejiang, C=CNEnter key password for <hzyapp> (RETURN if same as keystore password): [Storing hzyapp.keystore]
ok,這樣你就產生了一個hzyapp.keystore證書,備用。
上面我們講到還有一個檔案packager.json沒解析,這裡解析下,該檔案就是打包本地應用的配置檔案,開啟檔案內容配置對android的配置如下:
{ "applicationName":"HzyApp", "applicationId":"com.hwayifashiongroup.HzyApp",/*必須是包括兩個點*/ "bundleSeedId":"KPXFEPZ6EF", "versionString":"1.0", "versionCode":"1", "icon": { "36":"resources/icons/Icon_Android36.png", "48":"resources/icons/Icon_Android48.png", "57":"resources/icons/Icon.png", "72":"resources/icons/Icon~ipad.png", "114":"resources/icons/[email protected]", "144":"resources/icons/[email protected]" }, "inputPath":"./", "outputPath":"../build/", "configuration":"Debug", "platform":"Android",/*平臺,還有IOS等型別*/ "certificatePath":"X:/hzyapp.keystore",/*證書*/ "certificateAlias":"hzyapp",/*證書別名*/ "certificatePassword":"hzyapp",/*證書密碼*/ "sdkPath":"D:/GreenSoftWare/Android/android-sdk-windows",/*android-sdk路徑*/ "androidAPILevel":"8",/*Android版本,我用了2.2*/ "permissions":[ "INTERNET", "ACCESS_NETWORK_STATE", "CAMERA", "VIBRATE", "ACCESS_FINE_LOCATION", "ACCESS_COARSE_LOCATION", "CALL_PHONE" ]}
檔案配置成功後,執行最關鍵的一步,打包命令
如果全線飄綠,那恭喜你,你成功了,趕緊到/build/MyApp/native目錄下找你的apk吧,哈哈
ok,安裝到手機上,測試,一切正常,速度剛剛的,當然真正的和nativeapp比,必然會存在一些不足,但對於企業級的移動應用足夠了。
文章最後再爆一料,預設產生的app,安裝到android後,title bar是沒有隱藏的,這個你只需要去更改cmd的模版檔案即可
SenchaCmd/Sencha/Cmd/3.1.2.342/stbuild/st-res/android/AndroidManifest.xml,我想你該知道怎麼做了吧!(*^__^*)
OK了,本節基本上貫穿了整個Sencha Touch開發的全貌。
下節課將會介紹真正的Sencha Touch細節開發了,深入到app裡的各個層面(model,store,view,controller),注意事項,profile不同裝置的適配等,敬請期待。
能堅持看完的朋友,別忘了支援下哦
相關推薦
跟我一起玩轉Sencha Touch 移動 WebApp 開發(一)
1.目錄 移動框架簡介,為什麼選擇Sencha Touch?環境搭建建立專案框架,框架檔案簡介建立簡單Tabpanel案例自定義圖示的方式WebApp產品測試和釋出HTML5離線快取釋出成Android/IOS本地app應用 移動框架簡介,為什麼選擇Sencha Touch? 目前市面上,移動應用web框
Sencha Touch 2.4 開發(一)
API網址: http://docs.sencha.com/touch/2.4/2.4.2-apidocs/ 引入: sencha-touch.css sencha-touch-all.js兩個檔案。 寫第一個程式【Hello sencha Touch】。 <!D
跟我一起學Multiple View Geometry多檢視幾何(5)程式設計實踐課
前言:博主今天把Multiple View Geometry第九章後半部分也讀完了,想著寫點對應的程式碼練練手,程式基本思路如下:讀入兩張有一定視差的圖片分別提取出ORB特徵點以及描述子,再對描述子進行暴力匹配篩選獲得若干goodmatches,然後呼叫Op
跟我一起學Multiple View Geometry多檢視幾何(2)
前言:本篇部落格主要講fundamental matrix的由來與推導 9.2 The fundamental matrix F 綜合來說fundamental matrix就是epipolar geometry的代數表示,接下來我們從點和它對應的epi
用SQL玩轉數據挖掘之MADlib(一)——安裝
system wan 商品 ase 關聯規則挖掘 樹模型 ats 調用 ability 一、MADlib簡介 MADlib是Pivotal公司與伯克利大學合作的一個開源機器學習庫,提供了精確的數據並行實現、統計和機器學習方法對結構化和非結構化數據進行分析,主要目的
【JAVA秒會技術之玩轉SQL】MySQL優化技術(一)
MySQL優化技術(一) 開發的路上,總會碰到一些老系統,越用越慢。“慢”的原因也許有很多,但是,博主個人覺得,資料庫的設計和sql語句寫的好壞,對系統效率的影響是最直接,最顯而易見的!所以,學習一下MySQL的優化,還是很有必要的。當然,博主能力有限,沒那
Cordova移動端開發-(一)引言
我們在使用Cordova之前,由於整個體系涉及到的東西太多,先進行一個整體的瞭解。由於作者是Java開發,所以預設讀者對Java比較熟悉了。 一、整體環境介紹 1. 我們使用Cordova開發,當然一定要安裝Cordova了。 Cordova的安
跟我一起玩Win32開發(2):完整的開發流程
上一篇中我給各位說了一般人認為C++中較為難的東西——指標。其實對於C++,難點當然不侷限在指標這玩意兒上,還有一些有趣的概念,如模板類、虛基類、純虛擬函式等,這些都是概念性的東西,幾乎每一本C++書上都會介紹,而平時我們除了會接觸到純虛擬函式外,其他的不多用。純虛擬函式,
跟我一起玩Win32開發(21):複製&貼上&剪貼簿操作
我要提醒一下大家,看了我的博文學到的知識,千萬不要用於實際開發,不然你會被你的上司罵:“媽的,這些東西哪來的,從來沒有人這樣做過。”不信你試試,腦細胞被凍結的經理或者技術總監們肯定會這樣說的。 如果是一些有X年工作經驗(X永遠不可能大於100)的程式設計師肯定會說:“你怎麼
跟我一起玩Win32開發(23):漸變顏色填充
GradientFill函式可以對特定的矩形區域或者三角形區域進行漸變顏色的填充。我們先來看看GradientFill函式到底長得什麼樣子,帥不帥。 BOOL GradientFill( _In_ HDC hdc, _In_ PTRIVERTEX pVertex
跟我一起學python第三講 python整合開發環境pycharm安裝
python整合開發環境pycharm安裝 上一講我們完成了jupyter的安裝,在jupyter裡我們可以進行一些簡單程式的開發工作,但是要開發專案的時候,我們還是需要有一個整合開發環境(IED工具),而python中我現在接觸的最好用的IDE就是pycha
跟我一起學C++之從C到C++(bool型別)
bool型別 C++新增型別,表示邏輯真與假 1.邏輯型也稱布林型,其取值為true(邏輯真)和false(邏輯假),儲存位元組數在不同編譯系統中可能有所不同,VC++中為1個位元組。 2.宣告方式:boolresult;result=true; 3.可以當作整數用(tru
跟我一起學C++之從C到C++(結構體記憶體對齊)
1.什麼是記憶體對齊 (1) 編譯器為每個“資料單元”按排在某個合適的位置上。 (2) C、C++語言非常靈活,它允許你干涉“記憶體對齊”。也就是可以人為的設定編譯器的對齊方式。 2.為什麼要對齊 效能原因:在對齊的地址上訪問資料快。如果是位元組對齊方式
第二十四篇 玩轉數據結構——隊列(Queue)
stat 基礎 ann move 打印 圖片 data image 線性 1.. 隊列基礎 隊列也是一種線性結構; 相比數組,隊列所對應的操作數是隊列的子集; 隊列只允許從一端(隊尾)添加元素,從另一端(隊首)取出元素;
玩轉SpringCloud 二.服務消費者(2)feign
cover framework version 模式 over 能力 fault ble 路徑 上一篇博客講解了服務消費者的ribbon+restTemplate 模式的搭建,此篇文章將要講解服務消費者feign模式的搭建,這裏是為了普及知識 平時的項目中兩種消費模式選擇其
跟我學 Java 8 新特性之 Stream 流(四)並行流
隨著對流API認識的慢慢深入,本章我們要討論的知識點是流API裡面的並行流了。 在開始討論並行流之前,我先引發一下大家的思考,就你看到這篇文章的時間,你們是不是經常聽到,Intel i7 CPU什麼8核16執行緒,什麼Android手機8核4GB這種訊息,既然我們是處於
跟我學 Java 8 新特性之 Stream 流(三)縮減操作
和前面兩篇文章一起服用,效果會更佳。通過對流API的基礎體驗Demo和關鍵知識點的講解,相信大家對流API都有一定的認識了,但是流API強大的功能,可不僅僅像前面兩篇文章中說的那樣簡單,大家應該注意到,在第二篇中,我對Stream介面進行介紹的時候,並沒有把他的全部方法都
跟我學 Java 8 新特性之 Stream 流(二)關鍵知識點
我們的第一篇文章,主要是通過一個Demo,讓大家體驗了一下使用流API的那種酣暢淋漓的感覺。如果你沒有實踐,我還是再次呼籲你動手敲一敲,自己實實在跑一遍上一篇的Demo。 相信你的感受和理解也會隨之加深的。繼續探索流API的高階功能之前,我們先從介面級別全面瞭解一下流A
跟我學 Java 8 新特性之 Stream 流(六)收集
我們前面的五篇文章基本都是在說將一個集合轉成一個流,然後對流進行操作,其實這種操作是最多的,但有時候我們也是需要從流中收集起一些元素,並以集合的方式返回,我們把這種反向操作稱為收集。 流API也給我們提供了相應的方法。 如何在流中使用收集功能? 我們先看一看流API
跟我學 Java 8 新特性之 Stream 流(七)流與迭代器,流系列大結局
恭喜你們,馬上就要學完Java8 Stream流的一整系列了,其實我相信Stream流對很多使用Java的同學來說,都是一個知識盲點,因為這個原因,我才這麼細緻地講解Stream流的各個知識點,通過這一整個系列,我相信只要認真看了的同學,都已掌握的差不多了,就差實戰了。