1. 程式人生 > >微信小程式開發遇到的那些坑——CSDN 知識庫的初步嘗試

微信小程式開發遇到的那些坑——CSDN 知識庫的初步嘗試

【編者按】從內測到開啟公測,微信小程式已然成為了 IT 領域最為火熱的話題,除卻不同型別應用的可能性探索之外,對於開發團隊而言,最多的當屬踩過的那些坑。近一段時間,CSDN 也在為知識庫專案進行小程式開發的初步嘗試,對此,CSDN 高階研發工程師尚琳凱在一次線下活動中分享了知識庫小程式開發的一些經驗,本文為扼要總結。微信小程式的世界還都充滿著未知數,歡迎郵件[email protected]交流分享。

小程式為開發者提供了什麼

什麼是小程式

小程式是微信推出的一種新的公眾號的形態,不需要下載安裝,即可在微信中使用的應用。同時,需要注意的是,小程式、訂閱號、服務號、企業號是並行的體系。

以下為 CSDN 知識庫推出的“

微信開發”知識圖譜,能夠更好地幫助讀者瞭解微信小程式在微信開發中的位置。

微信小程式 MINA 框架

小程式提供了一個框架,微信稱之為“MINA”,這個框架主要分兩個層面,檢視層和邏輯層。框架的核心是一個響應的資料繫結系統。WXML 中的動態資料均來自對應 Page 的 data,這個資料繫結是單向的,只有資料發生變化,檢視才會做出相應的調整。這種模式,讓開發者專注於事件處理上,改變物件狀態,實現檢視更新。

為了方便以及限制開發者開發,微信自己定義了一系列的基礎元件,就是檢視層的組成單元(表單元件、媒體元件、導航等),元件自帶一些功能與微信風格的樣式,類似 HTML 標籤。微信還提供了很多的原生API,用來呼叫微信內部提供的功能,以及一個微信小程式開發者工具。

微信小程式原始碼結構:

  • 檢視層(將邏輯層的資料展現在檢視上)
  • 邏輯層(通過改變資料[setData方法]來改變檢視)
  • 配置檔案

在小程式中,微信規定了介面的組成模式,由四個檔案組成:

  • .wxml 檔案(頁面結構檔案)標籤語言,類似 HTML,真正負責頁面結構的檔案,可以繫結資料;
  • .wxss 檔案(樣式表文件)類似 CSS,大部分 CSS 樣式都相同;
  • .js 檔案(指令碼檔案)用來執行我們的邏輯,使用 JS 語言;
  • .json 檔案(配置檔案)主要配置公用的樣式,比如 Tab 欄、視窗樣式等。

知識庫小程式開發

知識庫小程式開發的初步嘗試關注重點是 JS 檔案和 WXML 檔案。

由於知識庫把開發領域細分成某個領域,例如技術語言、運維繫統、行業應用等方面,對每個技術和知識點都設計一個網狀圖譜,來總結技術某一方面涉及到的知識,同時為知識結構準備一些精品的內容,方便大家更系統的學習知識。所以在知識庫這個產品上,需要實現內容推薦、個人中心以及搜尋。使用者側和內容推薦都包括四層:庫-》知識結構-》內容列表-》內容詳情頁。搜尋功能可以根據搜尋的關鍵詞查詢到使用者側或推薦知識庫的相關內容,方便大家閱讀或收藏。

知識庫頁面設計

小程式元件滿足了所有的顯示功能和結構(列表、視窗、按鈕、事件等),API 齊全,便於邏輯開發。不同的功能模組放在不同的頁面裡,具體表現為:

  • 檢視層: Tab 欄,列表頁,知識結構頁,內容詳情頁,搜尋頁
  • 邏輯層:
    • Tab 欄->通過繫結資料index選擇一級頁面;
    • 列表頁->通過改變繫結資料contentlist陣列,控制列表顯示和動態載入;
    • 搜尋頁->通過繫結資料searchValue,通過事件及時獲取使用者輸入。

小程式開發路上踩過的坑

1. 開啟頁面數量限制(redirectTo還是navigateTo

微信提供 Tab 欄的設定,可以在app.json中配置,在 App 裡配置的 Tab 欄將出現在所有的一級頁面。但是它有一個問題就是第一次點選 Tab 將會開啟一個新的頁面,微信對開啟頁面的數量限制是五個。

微信提供了幾個頁面跳轉的方式,redirecttonavigateto,還有返回。重點說這兩個,redirectto會直接在原頁面上開啟新頁面,navigateto會新開啟一個頁面。由於微信在頁面數量上有限制,我們產品的層級有比較多,導致無法直接在app.json設定 Tab 欄。所以我們把 Tab 欄單獨設計出來。點選 Tab 不開啟新頁面。在每個初級頁面都引用進去,之後二級三級的頁面上不使用 Tab 切換,而是需要返回到初級頁面。

2. 樹狀結構的展示

每一個庫都有一個樹狀的知識結構,大家請看這個例子。每個層級展示的方式是一樣的,所以正常情況下,我們都會選用遞迴的方式來使展示。比如在這張圖裡,當我們判斷這個節點擁有子節點,就想再次呼叫同樣方法顯示。但是很遺憾,小程式裡,不論是使用模板,還是使用include的方式引用檔案,都沒有辦法做到自己調自己。

幸運的是我們知道層級最深有多少,這樣就可以寫幾個同樣的檔案和模板,加上不同的命名來呼叫。如果是未知層級的樹狀結構,就會非常難以處理。在這裡可以建議大家將樹狀結構變成陣列的形式,加上層級標識,在 WXML 檔案中可以使用迴圈的方式來處理層級的顯示。

3. HTML 頁面在微信小程式中展示

這是一個非常難處理的問題,微信不支援 HTML 頁面的展示,所以需要把所有 HTML 的標籤轉化成小程式內允許的標籤。我們使用了一個名叫wxParse的應用,它的功能就是通過正則表示式將 HTML 頁面轉化成 JSON 形式,再用模板的方式展現出來。在這裡面規定了各個標籤的樣式(WXSS)。遺憾的是它也有層級方面的問題,同樣是重複寫了很多完全一樣的模板。

HTML 轉 JSON 工具
轉化後的 HTML 頁面
  • 順序呼叫

如果 HTML 的標籤層級結構超出了模板個數,那麼超出部分將無法顯示出來。這個應用是在微信中執行的,建議大家把資料轉化放在伺服器端來進行,將轉換後的資料發給小程式。另外小程式setData()一次不能超過1024K,如果你的 JSON 格式資料超過這個限制,就會很難再拼接。

4. 冒泡事件

一個元件上的事件被觸發後,該事件會向父節點傳遞,由此引起不必要的邏輯處理,對此,使用費冒泡事件處理。

5. 網路請求介面wx.request()沒有攜帶 Cookies

如果伺服器端有通過獲取 Cookies 處理的邏輯沒辦法和小程式結合,只能為小程式單獨開發新的介面。

微信發起網路請求 API

總結

小程式在運營上的優勢在於微信使用者量大,適合推廣,某些功能單一的 App 可以在小程式中實現,不用再下載 App。開發者不用考慮平臺,開發成本低。但同時不適合開發邏輯複雜介面豐富的程式,受到框架限制,隨意性小,無法滿足所有功能。

瞭解最新移動開發相關資訊和技術,請關注 mobilehub 公眾微訊號(ID: mobilehub)。

mobilehub

相關推薦

程式live-pusher那些

最近在做用微信小程式實現實時通話,一個頁面同時使用了live-pusher和live-player。中途踩了許多坑,在這裡做一下總結,希望能幫到大家。 1問題:Live-player播著播著沒聲音了 原因:對live-pusher進行start, stop,resu

程式開發(入之旅)一:域名問題。

3、按照步驟來,經歷了註冊開發者->申請小程式開發->填寫小程式資訊->獲取小程式ID和祕鑰->下載開發者工具->新建專案。 tips:注意:按照教程建立新專案後,

程式開發之textarea

相信如果在開發小程式中使用過textarea的小夥伴們應該清楚這個連官網都還沒有暫解之法,所以在平時的開發中是儘量避免使用這個坑,但如果真的非要使用,那咋辦呢?故記下我的兩個思路,如各位有更好的方法,還請賜教留言~ 方法一:模擬textarea樣式文字框,點選

程式開發遇到的

1、input 、textarea 一堆問題,具體什麼問題 你們應該知道,廣大開發者心中也有數,是官方在技術上實現不了??還是其他原因呢 2、部分真機 小程式啟動時 頁面白屏問題 (貌似資源未載入,我說的不是圖片啥的,就是程式碼沒執行,控制檯一片空白) 3

程式開發之路上遇到的那些

微信野心越來越大,如今已經從開始簡單的聊天工具發展成了一個網際網路生態系統,網羅了目前各大網際網路平臺所具備的功能,最近iOS端微信上線的“搜一搜”和“看一看”更加證實了這一點,直接看下面這張圖吧: 好了,今天繼續給大家分享這個牛逼的“削蘋果”的小程式的相

程式開發遇到的那些】之——為什麼上拉載入後會返回頂部

我下面的程式碼是沒有問題的,確實每次都能載入到,但是都會重回頂部  注:下面的程式碼不能直接用,有一些變數沒有貼上來 //上拉載入下一頁商品 onReachBottom: function()

程式開發遇到的那些——CSDN 知識庫初步嘗試

【編者按】從內測到開啟公測,微信小程式已然成為了 IT 領域最為火熱的話題,除卻不同型別應用的可能性探索之外,對於開發團隊而言,最多的當屬踩過的那些坑。近一段時間,CSDN 也在為知識庫專案進行小程式開發的初步嘗試,對此,CSDN 高階研發工程師尚琳凱在一次線下

程式開發之tabbar

學習微信小程式中,遇到底部的TabBar不出現的問題。錯誤現象是,專案的app.json使用以下程式碼,卻沒有出現TabBar。 { "pages":[ "pages/clickDemo/clickDemo", "pages/logs/logs", "pages/index/

程式開發記錄(四)位址列傳參之true和false的

先看看小程式位址列傳參的方法,如下 wxml: <view class="weui-cells weui-cells_after-title" wx:if="{{isNewUser}}"> <navigator url="../addres

程式開發經驗總結(遇到的和問題彙總)

小編推薦:Fundebug專注於JavaScript、微信小程式、微信小遊戲,Node.js和Java實時BUG監控。真的是一個很好用的bug監控費服務,眾多大佬公司都在使用。 前言: 前段時間公司打算做一款基於線下服務的小程式,涉及到掃碼支付,地圖,充值,會員體系等功能。由於

程式開發中的那些

背景 定義問題 歸結模型 需求分析 軟體開發 背景 最近一段時間,做了一個送禮品的小程式。中間也遇到了一些坑,今天我把它羅列出來,並附上自己的一些看法,作為後續開發的一些參考。 送禮的業務類似於微信紅包,只不過將微信的紅包替換成了實物禮品,並且

程式開發中走過的(二)

》》》遇到的坑 (3)註冊頁面的實現 需求:使用者點選註冊按鈕,進入註冊頁面,輸入註冊資訊,完成註冊動作。 動畫演示: 程式碼實現: register.wxml <!--註

程式開發】javascript建立date物件

最近開發中用到date,開始以如下方式來建立: var date = new Date('2018-01-30 11:00:00'); 在開發工具上,除錯,ios 和 android都好好的。 在真機上一跑,android沒問題,ios出問題了。 不應該呀,按理,在開發工具上整合的是ios瀏覽器核心。

程式開發 -- 踩

自學微信小程式,用小程式做了個小專案,踩了一些坑: 坑一: Navigated to http://1755603039.appservice.open.weixin.qq.com/appservice VM2507:1 Sat Feb 04 2017 21:46:27

程式開發中走過的(一)

》》》前言 2016年9月21日晚間,微信公眾平臺開始陸續對外發送小程式內測邀請。此時,便對微信小程式有了關注,打算學習、並開發一款小程式。期間因為有其他專案開發的原因,稍有中斷,然在前些天,終於將小程式的初版釋出,並稽核通過,下面文章中會把我在開發這個圖片類

程式 開發過程中遇到的(一)

1.我們使用app.json檔案來對微信小程式進行全域性配置,決定頁面檔案的路徑、視窗表現、設定網路超時時間、設定多 tab 的時候在pages中寫註釋的時候回報錯。 例如: { "pages":[ //這是首頁面 "pages/

程式開發 簽到快取遇到的

近期開發的一個同城小程式遇到了部分舊版本安卓手機開啟簽到頁面當前頁面顯示已經簽到,目前猜測問題是部分手機首次簽到後存到快取的資料出現的問題,目前的解決辦法是把簽到的記錄存到資料庫中,希望以後有好的解決辦

程式 開發

1,json檔案裡不能使用備註,否則編輯會報錯 2.如果圖片未指定高寬,小程式會有一個預設的值。image元件預設寬度300px、高度225px 3.只有使用text元件包裹的文字,才能在手機端長按選中 4.快取資料大小不能超過10M 5.對swiper

程序開發問題踩整理,web-view、openID、程序支付等匯總

模板 www. 通過 file 微信小程序 ref 網絡請求 session保持 family 微信小程序開發過程中遇到的問題踩坑整理,內容包括web-view、openID、小程序支付、網絡請求等等一系列問題匯總,希望對大家能有一定幫助和啟發。 內容如下: 關於小程序

程序遇到的那些

相機 textarea 每次 過程 自己 微信小程序 text 相冊 問題 最近因為項目需要從零開始開發微信小程序,在使用的過程中踩過不少的坑,但他的優點也多多。 優點: 1.不需要操心移動端的適配問題 2.可以直接調用手機的一些功能,如:相冊,照相機之類的 3.有自己一套