HBuilder MUI開發(fā):新手會遇到的各種坑匯總

相比于其他的Hybrid H5+APP平臺惧盹,MUI也算是自成一派捉撮,居正自認為它是國內(nèi)平臺中最棒的之一蔓彩,包括web和原生相結(jié)合在內(nèi)的各方面細節(jié)都設(shè)計的很到位恳守。但MUI有個缺點——開發(fā)文檔不夠詳細榄审,學(xué)習(xí)的過程中會遇到很多坑砌们。在本文中,居正將自己一段時間來摸爬滾打的經(jīng)驗分享給大家搁进,幫助大家少走點彎路浪感。

如今,移動應(yīng)用程序的開發(fā)已經(jīng)不僅僅是傳統(tǒng)意義上的iOS饼问、Android雙平臺影兽,Swift、Java兩種開發(fā)方式莱革。以WebUI+NativeUI混合架構(gòu)的Hybrid APP已經(jīng)漸漸為開發(fā)者和用戶們所接受峻堰。例如知乎的Android客戶端、網(wǎng)易云音樂的Mac和Android客戶端等采用的都是Web APP開發(fā)架構(gòu)盅视。對開發(fā)者來說捐名,只需要掌握HTML和Javascript就可以開發(fā)幾乎任意平臺的客戶端,而且開發(fā)速率相比于采用原生語言來說大大提高闹击。開發(fā)Hybrid APP的平臺有很多镶蹋,國外有谷歌官方的PWA,國內(nèi)也有如apicloud赏半、dcloud等廠商在做這類的產(chǎn)品梅忌。

Hybrid APP詳細了解

居正最近也入了Hybrid APP這個坑,采用的是dcloud家的HBuilder+MUI平臺除破,官方網(wǎng)站:http://dev.dcloud.net.cn/mui/牧氮。相比于其他的平臺,MUI也算是自成一派瑰枫,居正自認為它是國內(nèi)平臺中最棒的之一踱葛,包括web和原生相結(jié)合在內(nèi)的各方面細節(jié)都設(shè)計的很到位。但MUI有個缺點——開發(fā)文檔不夠詳細光坝,學(xué)習(xí)的過程中會遇到很多坑尸诽。在本文中,居正將自己一段時間來摸爬滾打的經(jīng)驗分享給大家盯另,幫助大家少走點彎路性含。

1.開發(fā)文檔隨時查

雖然文檔不詳細,但不看文檔是萬萬不可的鸳惯。由于MUI相關(guān)的文檔分布的比較散商蕴,這里歸結(jié)如下:

MUI框架文檔:http://dev.dcloud.net.cn/mui/window/(打開窗口叠萍、事件處理等應(yīng)用內(nèi)的基本方法)

HTML5+API文檔:http://www.html5plus.org/doc/h5p.html(通過js調(diào)用webview、攝像頭绪商、本地存儲苛谷、相冊等手機原生方法的類庫)

2.MUI≠mui.css

MUI其實有兩個意思,一個是MUI開發(fā)平臺格郁,一個是mui.css的web ui前端框架腹殿,采用的是ios風(fēng)格(居正個人覺得挺難看的= =)。

你可以用自己的UI框架例书,這里推薦MaterializeCSS:http://www.materializecss.cn/锣尉。

采用自己的UI框架的話就不必寫什么、標簽(這些是為mui.css專門設(shè)計的)决采,就和平常開發(fā)網(wǎng)頁一樣寫自沧、寫即可。

建議新手不要用mui.css织狐。

3.一個很好的開發(fā)實例

官方提供的開發(fā)實例是Hello MUI暂幼,但主要演示的是mui.css,注釋也比較少移迫。這里推薦自己互聯(lián)網(wǎng)上找到的一個開發(fā)實例旺嬉。

滴石APP:https://github.com/uikoo9/dishi

開發(fā)筆記:http://uikoo9.com/book/detail/3

閱讀一下整套代碼,會有很大幫助厨埋!

4.寫法與順序

前面都是推薦邪媳,現(xiàn)在正式開始踩坑。

html文件head里面的東西沒聲明清楚荡陷,或者引入js順序不對的話雨效,很容易出錯。這里直接套格式(以采用了MaterializeCSS前端框架為例废赞,每個html文件都同理):



JQuery版本最好在1.10以上徽龟,必須在MUI核心js之后、所有自己的js之前引入唉地。

5.mui變量和plus變量分別是什么

mui變量和plus變量都是在MUI核心js里面聲明的据悔。

mui變量中的方法是打開窗口、事件處理等應(yīng)用內(nèi)的基本方法耘沼。是dcloud平臺自己制作的极颓。

plus變量是通過js調(diào)用webview、攝像頭群嗤、本地存儲菠隆、相冊等手機原生方法的類庫。是HTML5+中國產(chǎn)業(yè)聯(lián)盟統(tǒng)一制作的。它的文檔里面各種變量各種方法一定要去看骇径!

6.mui.init()躯肌、mui.plusReady()和子頁面

官方的說法

在app開發(fā)中,若要使用HTML5+擴展api既峡,必須等plusready事件發(fā)生后才能正常使用羡榴,mui將該事件封裝成了mui.plusReady()方法碧查。

當(dāng)然你不可能不用到HTML5+API运敢,所以請把業(yè)務(wù)代碼全部寫到mui.plusReady()里面!

mui.init()用于頁面初始化嚷辅,也必須調(diào)用概而。

直接套格式(寫在第3點提到的某個頁面專一的js里面):

mui.init();

mui.plusReady(function(){

//業(yè)務(wù)代碼…

}

需要注意的是mui.init()和mui.plusReady()的執(zhí)行分不清誰先誰后谦去。所以如果你在mui.init()里面按照官方文檔的說明用subpages創(chuàng)建了一個子頁面,在mui.plusReady()里面是不能直接取得引用的(會報null錯誤)卦方。

故不建議采用官方文檔中的方法在mui.init()里面直接創(chuàng)建subpages!新手可以記滋┘选:mui.init()里面什么都不要寫盼砍。

也不建議新手用官方推薦的什么雙webview下拉加載上拉刷新來提高性能,比較麻煩而且容易出錯逝她,直接用JQuery插件實現(xiàn)浇坐。單webview性能足夠了,一般的設(shè)備其實也都不會卡黔宛。

如果實在要用子窗口的話建議這樣寫:

mui.init();

mui.plusReady(function(){

var child=plus.webview.create(‘窗口URL’,’窗口ID’,{top:’60px’/*子窗口與父窗口頂部的距離近刘,以免遮住父窗口頂部導(dǎo)航欄*/});//直接用H5+API創(chuàng)建窗口

plus.webview.currentWebview().append(child);//將創(chuàng)建的子窗口添加到父窗口

}

添加完子窗口后,父窗口原來位置上面的東西全部會被擋住臀晃。

實例:MUI內(nèi)置瀏覽器

7.事件處理觉渴,用這一個封裝就夠了

MUI文檔中的事件管理有沒有讓你暈頭轉(zhuǎn)向?這里直接給一個萬能封裝徽惋,用它就夠了(放在第3點提到的全局js里面):

function myEvent(obj, event, func){

$(document).off(event, obj).on(event, obj, func);

};

myEvent方法有三個傳參案淋。obj是一個字符串,和JQuery選擇器傳入的參數(shù)一模一樣险绘。event是一個字符串踢京,寫事件類型,一般如果是點擊的話就寫tap(不要寫click隆圆,習(xí)慣要改過來)漱挚。func傳入一個匿名方法,里面寫業(yè)務(wù)代碼渺氧。

使用方法旨涝,以點擊id為hello的按鈕彈出警告框為例:

myEvent(‘#hello’,’tap’,function(){

alert(‘你好’);

});

8.頁面間傳參,用這一個套路就夠了

MUI的頁面間傳參有各種各樣的方法。這里推薦一個最簡單最高效的:用extras屬性傳參白华。

A頁面打開B頁面(text.html)代碼:

mui.openWindow({

url:’text.html’,

id:’text01′,

extras:{

content:’我是內(nèi)容’,

title:’我是標題’

}

});

順便提一下mui.openWindow中的兩個必備參數(shù):

url:目標頁面相對于此頁面的地址(不是相對于業(yè)務(wù)處理js的地址)

id:字符串?dāng)?shù)據(jù)慨默,打開窗口的唯一標識符。如果打開了一個窗口沒有銷毀弧腥,在其他地方又采用此id打開窗口的話就會直接跳到先前打開的那個窗口厦取,并且不會執(zhí)行里面的mui.plusReady()代碼。

B頁面接收A頁面?zhèn)鱽淼膬蓚€參數(shù)(必須寫在mui.plusReady()里面):

var content=plus.webview.currentWebview().content;

var title=plus.webview.currentWebview().title;

需要注意的是管搪,extras里面的取名不能取mui.openWindow中存在的參數(shù)虾攻,例如id、url這樣的更鲁,因為調(diào)用的方法都是【plus.webview.currentWebview().名字】霎箍。否則MUI就不知道你想調(diào)用的是這個窗口本身的屬性還是傳過來的參數(shù)。這一點應(yīng)該算是MUI的設(shè)計缺陷澡为。

9.網(wǎng)絡(luò)請求必須用mui.ajax漂坏,調(diào)試必須用真機或模擬器

你可能習(xí)慣了JQuery的$.ajax方法,但在mui開發(fā)里面必須用mui.ajax媒至,否則會出現(xiàn)跨域錯誤問題顶别。調(diào)試的時候不要用HBuilder自帶的內(nèi)置瀏覽器調(diào)試,必須用真機或模擬器中的HBuilder基座調(diào)試拒啰,否則也會跨域報錯驯绎。

mui.ajax和$.ajax參數(shù)基本一樣,返回的是一個XMLHttpRequest對象图呢。

10.manifest.json中的build版本號要手動改

版本號有兩種条篷,一種是應(yīng)用版本名稱(如:1.2),一種是build版本號(如:65)蛤织。應(yīng)用市場判斷APP有沒有升級用的是build版本號而不是應(yīng)用版本名稱赴叹。但HBuilder中build版本號并不是自動遞增的,需要手動改指蚜。如果沒改的話應(yīng)用升級發(fā)布到應(yīng)用市場里面會出現(xiàn)奇怪的錯誤乞巧。

打開manifest.json切換到代碼視圖,找到:

其中name即為應(yīng)用版本名稱摊鸡,code即為build版本號绽媒。每次發(fā)布應(yīng)用的時候code值要改成比上次大的數(shù)。

以上是為大家整理的若干條新手易錯點免猾,希望大家在開發(fā)中少走彎路是辕!


本文首發(fā)于淀粉月刊:https://dfkan.com

原作者:居正

發(fā)布時間:2018年7月11日

點此查看原文

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市猎提,隨后出現(xiàn)的幾起案子获三,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疙教,死亡現(xiàn)場離奇詭異棺聊,居然都是意外死亡,警方通過查閱死者的電腦和手機贞谓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門限佩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人裸弦,你說我怎么就攤上這事祟同。” “怎么了烁兰?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵耐亏,是天一觀的道長徊都。 經(jīng)常有香客問我沪斟,道長,這世上最難降的妖魔是什么暇矫? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任主之,我火速辦了婚禮,結(jié)果婚禮上李根,老公的妹妹穿的比我還像新娘槽奕。我一直安慰自己,他們只是感情好房轿,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布粤攒。 她就那樣靜靜地躺著,像睡著了一般囱持。 火紅的嫁衣襯著肌膚如雪夯接。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天纷妆,我揣著相機與錄音盔几,去河邊找鬼。 笑死掩幢,一個胖子當(dāng)著我的面吹牛逊拍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播际邻,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼芯丧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了世曾?” 一聲冷哼從身側(cè)響起缨恒,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肿轨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寿冕,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年椒袍,在試婚紗的時候發(fā)現(xiàn)自己被綠了驼唱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡驹暑,死狀恐怖玫恳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情优俘,我是刑警寧澤京办,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站帆焕,受9級特大地震影響惭婿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叶雹,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一财饥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧折晦,春花似錦钥星、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至风喇,卻和暖如春宁改,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背响驴。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工透且, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人豁鲤。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓秽誊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親琳骡。 傳聞我的和親對象是個殘疾皇子锅论,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • MUI背景介紹 MUI是一套前端框架,由DCLOUD公司研發(fā)而成楣号,提供大量H5和js語言組成的組件最易,大大提高了開發(fā)...
    jackzhouyu閱讀 29,789評論 2 76
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,302評論 25 707
  • 在深圳 教育機構(gòu)很多 各種培訓(xùn)機構(gòu)各種培訓(xùn) 如果 把所有的教育資源全部整合 聯(lián)盟起來 那么一定會很好玩 第一 ...
    余淼閱讀 123評論 0 0
  • 【1】 05年怒坯,我十二歲,娟子十三歲藻懒,《仙劍奇?zhèn)b傳》正在瘋狂的席卷著電視屏幕剔猿,我倆窩在沙發(fā)上,我哭著嬉荆,娟子一臉嫌棄...
    MrHear閱讀 538評論 0 2
  • 烏云浸濕的日子 沒有黎明归敬,膽怯讓我 蜷縮成一只蝸牛 躲避風(fēng)口浪尖 被荒蕪和孤獨款待 被厚重的黑款待 命運是否想讓我...
    木屋和貓閱讀 173評論 0 3