背景介紹:
所在公司由于技術(shù)團隊小会放,開發(fā)任務緊监氢,領(lǐng)導把移動端的項目外包了。外包團隊的工程師使用阿里前端團隊出品的SUI Mobile的前端UI庫來開發(fā)管闷,所以,我也就理所當然地去學習官方文檔(http://m.sui.taobao.org/)燥滑。
這個UI庫渐北,其實是山寨Framework7的。優(yōu)點是足夠地輕量級铭拧、且提供中文文檔赃蛛。缺點是由于核心開發(fā)人員已經(jīng)離開阿里恃锉,本項目已經(jīng)將近一年沒有更新、無人維護了呕臂,基本沒有形成社區(qū)破托。該作者離職后把SUIMobile項目改了名,叫做Light7(http://www.light7.cn/)歧蒋,修復了部分bug土砂。覺得SUI Mobile不錯的,可以考慮使用Light7.
第一個坑:必須顯式地調(diào)用$.init()方法谜洽。
官方文檔里(http://m.sui.taobao.org/components/)有這么一句話:
如果沒有這樣顯式地調(diào)用初始化方法的話萝映,JavaScript腳本很有可能會不執(zhí)行。當我拿到外包團隊提交的代碼的時候阐虚,我是崩潰的序臂。因為有許多莫名其妙的bug。最后試著加了這段代碼之后实束,發(fā)現(xiàn)JavaScript才正常地調(diào)用了奥秆。
第二個坑:建議全局禁用自帶的路由$.config = {router: false}。
官方文檔(http://m.sui.taobao.org/components/#router)上介紹說:
`Router默認開啟咸灿,會自動攔截所有鏈接的Touch行為构订,如果希望一個鏈接走瀏覽器原生跳轉(zhuǎn)而不使用router,可以在鏈接上增加class="external"或者自定義屬性,如xxx避矢。如果需要禁用路由功能,那么可以在 zepto 之后, msui 之前使用$.config = {router: false}來禁用.`
我遇到的情況是這樣的:首頁有個輪播悼瘾,第一次進來首頁可以正常播放。當用戶從首頁進到其他頁面之后谷异,通過頂部的返回按鈕或者瀏覽器的后退鍵回到首頁時分尸,輪播是卡住的。調(diào)試代碼后歹嘹,發(fā)現(xiàn)返回后,js腳本是不執(zhí)行的孔庭。試著全局禁用了路由之后尺上,輪播可以自動播放了,js腳本都能正常執(zhí)行了圆到。
第三個坑:只支持Zepto.js 不支持jQuery怎抛。
眾所周知,Zepto.js雖然比jQuery輕量芽淡,但基于jQuery的插件眾多马绝,可以為我們節(jié)省不少重復造輪子的精力。同時挣菲,jQuery效率更高富稻,開發(fā)者也更熟悉jQuery的方法掷邦。然而SUI Mobile只支持Zepto.js,這就尷尬了椭赋。SUI Mobile在GitHub上有這個issue(https://github.com/sdc-alibaba/SUI-Mobile/issues/143)抚岗。
我們這個項目的外包團隊也許是因為這個原因同時使用了Zepto.js 和jQuery兩個類庫。由于兩個類庫都是用“$”哪怔,會導致了莫名其妙的bug宣蔚。所以,如果你也遇到這種情況认境,不得不使用兩個庫的時候胚委,那么使用Zepto來替換這個UI庫里提供的js方法中的“$”,來解決命名沖突叉信。
當然篷扩,如果可以,建議使用Light7來代替SUI Mobile茉盏。因為Light7是支持jQuery的鉴未。