微信小程序開發(fā)API調(diào)研

微信小程序在周六晚上終于正式放出了開發(fā)文檔粹舵,
雖然沒(méi)有內(nèi)測(cè)賬號(hào)無(wú)法在公眾平臺(tái)上內(nèi)測(cè),
但根據(jù)開發(fā)文檔以及開發(fā)工具的模擬器也終于可以探一下廬山真面目了~

根據(jù)之前參與的一個(gè)嘗試用web技術(shù)編程N(yùn)ativeUI項(xiàng)目的一些經(jīng)驗(yàn)及遇到的問(wèn)題强经,
對(duì)微信小程序參照開發(fā)文檔及模擬器中的一些嘗試,總結(jié)下看到的一些特性吧

整個(gè)小程序應(yīng)用由多個(gè)Page(頁(yè)面)組成寺渗,先從Page開始:

Page

  • 分為兩層:視圖層(WXML(HTML變體) + WXSS(CSS變體)) + 邏輯層(跑在JsCore里的JavaScript)
  • canvas外匿情,邏輯層無(wú)任何直接操作視圖層的API,僅通過(guò) 模板+“數(shù)據(jù)綁定” 來(lái)控制視圖層

模板

  • 模板功能
    • 類“HTML”的標(biāo)簽語(yǔ)言來(lái)描述視圖
    • 類似vue信殊、angular等炬称,通過(guò)“指令”強(qiáng)化模板
    • 提供雙大括號(hào)(Mustache)風(fēng)格的“數(shù)據(jù)綁定”
  • 組織管理
    • 提供了具有獨(dú)立作用域的template來(lái)定義模板片斷以供其他處的模板使用
    • WXML文件中可以引入其他WXML文件

其中模板功能方面具體來(lái)看:

標(biāo)簽指令

  • 僅提供了'循環(huán)'與'條件'兩種控制結(jié)構(gòu)的指令:
    • wx:forwx:if涡拘、wx:elif玲躯、wx:else

“數(shù)據(jù)綁定”

  • 所有邏輯層對(duì)視圖層的控制均僅通過(guò)“數(shù)據(jù)綁定”完成,包括動(dòng)畫
  • 所有數(shù)據(jù)綁定均包裹在雙大括號(hào)(Mustache)即{{ }}中
    • 支持在文本鲸伴、也支持在屬性值中使用府蔗。另外條件、循環(huán)指令中表達(dá)式也需由雙大括號(hào)包裹
  • 數(shù)據(jù)綁定為單向綁定
    • 模板可使用邏輯層通過(guò)接口指定的數(shù)據(jù)
      • 初始化時(shí)傳入的數(shù)據(jù)對(duì)象汞窗,在初始化結(jié)束之后便再與視圖層無(wú)任何關(guān)聯(lián)
        • 改變?cè)瓟?shù)據(jù)對(duì)象上的屬性也并始終不會(huì)更新至視圖層
      • 更新數(shù)據(jù)需要顯式地調(diào)用setData接口
        • 更新為局部更新姓赤,即本次未設(shè)置的數(shù)據(jù)值則沿用舊有值不改變
      • 視圖層的處理應(yīng)該是完全在native端(而非js端)完成,因此數(shù)據(jù)對(duì)象也未與js環(huán)境共享仲吏、需要手動(dòng)調(diào)用接口設(shè)置才能更新
    • 支持部分簡(jiǎn)單表達(dá)式
      • 支持算數(shù)表達(dá)式不铆、關(guān)系表達(dá)式、字符串連接表達(dá)式裹唆、三元表達(dá)式
      • 不能如angular誓斥、vue中支持函數(shù)/方法調(diào)用
  • 用戶輸入的收集/獲取:
    • 未提供類似angular许帐、vue中的雙向數(shù)據(jù)綁定劳坑,而是類似react的方式僅通過(guò)事件對(duì)象接收用戶輸入
  • 此外相比其他類似的模板增強(qiáng)方案還增加了比較便捷的數(shù)據(jù)重組功能:
    • 可以在雙大括號(hào)(Mustache)中將邏輯層提供的數(shù)據(jù)進(jìn)行重組,構(gòu)成新的數(shù)組或?qū)ο笠苑奖闶褂?/li>

樣式

  • 支持頁(yè)面級(jí)及應(yīng)用級(jí)的WXSS文件通過(guò)選擇器指明樣式成畦,也支持元素內(nèi)聯(lián)style屬性進(jìn)行更高優(yōu)先級(jí)的覆蓋
  • 猜測(cè)布局渲染同樣基于facebook的css-layout垢袱,以提供flex為主的布局
    • 但在css-layout提供的flex布局基礎(chǔ)之上攻柠,結(jié)合native的文字排版提供了支持折行/多行的行內(nèi)環(huán)境影斑,從而支持了display: inline惠遏、display: inline-block,如下圖:

      行內(nèi)環(huán)境排版示例
    • 此外拄养,小程序框架對(duì)樣式非布局方面的處理應(yīng)還有(css-layout中均未提供):代理某些native元素的屬性設(shè)置(如TextViewcolor)离斩,并額外提供了邊框與背景的繪制(如同@袁煒之前在o2o框架項(xiàng)目中所做)、子元素對(duì)父元素的樣式繼承等
      • 圓角支持同樣僅在于繪制,而不會(huì)對(duì)子元素進(jìn)行截?cái)?/p>

  • 選擇器方面
    • 只支持element跛梗、class寻馏、id及逗號(hào)選擇器
    • 目前不支持后代等選擇器,這樣應(yīng)該很大程度地減少了復(fù)雜度及性能消耗
    • 另外竟然額外支持了::before::after兩個(gè)偽元素選擇器

事件

邏輯層到視圖層的控制完全通過(guò)“數(shù)據(jù)綁定”茄袖,視圖層至邏輯層的反饋則僅有視圖元素的事件(沒(méi)有任何類似DOM的對(duì)象模型/接口)

  • 通過(guò)標(biāo)簽屬性的方式在WXML中注冊(cè)事件回調(diào)方法
  • 支持事件冒泡操软,即模擬了HTML中事件的冒泡階段、但未模擬事件捕獲階段
  • 是否阻止繼續(xù)冒泡宪祥,必須在監(jiān)聽(tīng)時(shí)就要確定
    • 通過(guò)bindxx為不截獲冒泡聂薪,而通過(guò)catchxx為截獲
    • 原因應(yīng)是事件的派發(fā)也完全由native側(cè)完成,故無(wú)法如web一樣在js對(duì)事件處理的過(guò)程中設(shè)置是否阻止

視圖組件

印象比較深刻:組件相當(dāng)?shù)厝?/strong>蝗羊〔匕模看上去似乎是做了充分的準(zhǔn)備、也相當(dāng)?shù)刂匾曇摇⒄娴念A(yù)備要用小程序掀起一場(chǎng)波瀾

  • 最基本的翔悠,封裝了native中各常用組件,如View野芒、Text蓄愁、ImageToast狞悲、ScrollView
  • 并且提供了一些抽象層次更高的業(yè)務(wù)組件撮抓,像swiper(輪播組件)、progress(進(jìn)度條)摇锋、icon(圖標(biāo))丹拯、loadingnavigator
  • 表單方面荸恕,模擬了web下幾乎所有的表單元素:form乖酬、input(支持text, number, idcard, digit, time, date)、checkbox融求、radio咬像、buttonlabel(同樣具有代理焦點(diǎn)的功能)
  • 并提供了接口更友好的checkbox-group生宛、radio-group施掏、更適合移動(dòng)場(chǎng)景的picker(列表選擇器 支持普通列表,時(shí)間選擇器,日期選擇器)、slider(滾動(dòng)選擇器)茅糜、switch(開關(guān))、action-sheet(上拉菜單)
  • 此外還提供了地圖(雖然現(xiàn)在看還略微不是很完善素挽,比如地圖上自定義覆蓋物的設(shè)置并不支持動(dòng)態(tài)更新)
  • 并且~ 提供了完整API的canvas蔑赘!從能力或說(shuō)可能性上使開發(fā)者具備了任意繪制界面的可能性

稍微想像一下:cocos2d-x基于h5 canvas的js版,應(yīng)該不費(fèi)很大周張就可以移植到微信小程序的canvas上~ 屆時(shí)也許就可以使用cocos2d在微信小程序上開發(fā)游戲了

本地能力

同視圖組件一樣,也很全面缩赛。

  • 網(wǎng)絡(luò)上:支持https請(qǐng)求耙箍,并支持WebSocket
  • 媒體能力:相冊(cè)、音視頻播放與錄制
  • 位置及移動(dòng)速度信息(以后滴滴的微信版是不是會(huì)好用很多~)
  • 緩存文件讀寫酥馍、本地文件保存辩昆、設(shè)備信息、傳感器監(jiān)聽(tīng)旨袒、界面相關(guān)汁针、以及微信開放的登錄、支持砚尽、消息等接口等

概覽/框架

補(bǔ)充一下將Page(頁(yè)面)組織成完整的小程序應(yīng)用:

  • 通過(guò)約定的目錄結(jié)構(gòu)來(lái)放置配置施无、頁(yè)面JSWXML必孤、WXSS等文件
  • 通過(guò)配置來(lái)指明應(yīng)用的基本信息
    • 核心配置為構(gòu)成應(yīng)用的各個(gè)頁(yè)面(Page)的路徑
      • 第一個(gè)頁(yè)面被用作應(yīng)用的首頁(yè)猾骡,此后可通過(guò)API接口與navigator組件進(jìn)行頁(yè)面跳轉(zhuǎn)
    • 此外還可配置其他如窗口、導(dǎo)航欄敷搪、底部多Tab內(nèi)容等
  • 另外應(yīng)用及各頁(yè)面的生命周期中各節(jié)點(diǎn)均有提供回調(diào)兴想,可分別在應(yīng)用及各頁(yè)面主js中注冊(cè)時(shí)指明

其他

  • 開發(fā)工具基于chrome調(diào)試工具改造,又與小程序本身有很好結(jié)合赡勘,非常好用
  • js支持CommonJS模塊化
  • 元素支持data-開頭的自定義屬性嫂便,值可以在事件發(fā)生時(shí)隨事件對(duì)象一同傳遞至回調(diào)方法中
    • 這樣雖然沒(méi)有DOM接口,卻可以在事件處理時(shí)獲取到視圖相關(guān)的額外信息
  • 表單元素的change等事件狮含、touch系列各事件顽悼、taplongtap事件也全面支持

附:

官方文檔及資料

09月23號(hào)在“微信公眾平臺(tái)”正式放出“公眾平臺(tái)小程序文檔和工具”的公告

體驗(yàn)

  • 目前只有內(nèi)測(cè)開發(fā)者才能在微信公眾后臺(tái)操作蔚龙、并在手機(jī)體驗(yàn)(需6.3.27以上版本微信,目前似乎android還未發(fā)布該版本)
  • 非內(nèi)測(cè)開發(fā)者只能在pc/mac的模擬器里預(yù)覽
    • 官網(wǎng)平臺(tái)頁(yè)面下載鏈接目前被翻頁(yè)鍵擋住了映胁。木羹。。這里列一下:

開發(fā)文檔:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末解孙,一起剝皮案震驚了整個(gè)濱河市坑填,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弛姜,老刑警劉巖脐瑰,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異廷臼,居然都是意外死亡苍在,警方通過(guò)查閱死者的電腦和手機(jī)绝页,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)寂恬,“玉大人续誉,你說(shuō)我怎么就攤上這事〕跞猓” “怎么了酷鸦?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)牙咏。 經(jīng)常有香客問(wèn)我臼隔,道長(zhǎng),這世上最難降的妖魔是什么眠寿? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任躬翁,我火速辦了婚禮,結(jié)果婚禮上盯拱,老公的妹妹穿的比我還像新娘盒发。我一直安慰自己,他們只是感情好狡逢,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布宁舰。 她就那樣靜靜地躺著,像睡著了一般奢浑。 火紅的嫁衣襯著肌膚如雪蛮艰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天雀彼,我揣著相機(jī)與錄音壤蚜,去河邊找鬼。 笑死徊哑,一個(gè)胖子當(dāng)著我的面吹牛袜刷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播莺丑,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼著蟹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了梢莽?” 一聲冷哼從身側(cè)響起萧豆,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎昏名,沒(méi)想到半個(gè)月后涮雷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轻局,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年洪鸭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膜钓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卿嘲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夫壁,到底是詐尸還是另有隱情拾枣,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布盒让,位于F島的核電站梅肤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏邑茄。R本人自食惡果不足惜姨蝴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肺缕。 院中可真熱鬧左医,春花似錦、人聲如沸同木。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)彤路。三九已至秕硝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洲尊,已是汗流浹背远豺。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坞嘀,地道東北人躯护。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像姆吭,于是被迫代替她去往敵國(guó)和親榛做。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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