微信小程序在周六晚上終于正式放出了開發(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ù)綁定”
- 組織管理
其中模板功能方面具體來(lái)看:
標(biāo)簽指令
“數(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è)置才能更新
- 初始化時(shí)傳入的數(shù)據(jù)對(duì)象汞窗,在初始化結(jié)束之后便再與視圖層無(wú)任何關(guān)聯(lián)
- 支持部分簡(jiǎn)單表達(dá)式
- 支持算數(shù)表達(dá)式不铆、關(guān)系表達(dá)式、字符串連接表達(dá)式裹唆、三元表達(dá)式
- 不能如angular誓斥、vue中支持函數(shù)/方法調(diào)用
- 模板可使用邏輯層通過(guò)接口指定的數(shù)據(jù)
- 用戶輸入的收集/獲取:
- 未提供類似angular许帐、vue中的雙向數(shù)據(jù)綁定劳坑,而是類似react的方式僅通過(guò)事件對(duì)象接收用戶輸入
- 此外相比其他類似的模板增強(qiáng)方案還增加了比較便捷的數(shù)據(jù)重組功能:
- 可以在雙大括號(hào)(
Mustache
)中將邏輯層提供的數(shù)據(jù)進(jìn)行重組,構(gòu)成新的數(shù)組或?qū)ο笠苑奖闶褂?/li>
- 可以在雙大括號(hào)(
樣式
- 支持頁(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è)置(如
TextView
的color
)离斩,并額外提供了邊框與背景的繪制(如同@袁煒之前在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è)置是否阻止
- 通過(guò)
視圖組件
印象比較深刻:組件相當(dāng)?shù)厝?/strong>蝗羊〔匕模看上去似乎是做了充分的準(zhǔn)備、也相當(dāng)?shù)刂匾曇摇⒄娴念A(yù)備要用小程序掀起一場(chǎng)波瀾
- 最基本的翔悠,封裝了native中各常用組件,如
View
野芒、Text
蓄愁、Image
、Toast
狞悲、ScrollView
等 - 并且提供了一些抽象層次更高的業(yè)務(wù)組件撮抓,像
swiper
(輪播組件)、progress
(進(jìn)度條)摇锋、icon
(圖標(biāo))丹拯、loading
、navigator
等 - 表單方面荸恕,模擬了web下幾乎所有的表單元素:
form
乖酬、input
(支持text
,number
,idcard
,digit
,time
,date
)、checkbox
融求、radio
咬像、button
、label
(同樣具有代理焦點(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è)面
JS
、WXML
必孤、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)
- 第一個(gè)頁(yè)面被用作應(yīng)用的首頁(yè)猾骡,此后可通過(guò)API接口與
- 此外還可配置其他如窗口、導(dǎo)航欄敷搪、底部多Tab內(nèi)容等
-
核心配置為構(gòu)成應(yīng)用的各個(gè)頁(yè)面(
- 另外應(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)的額外信息
- 這樣雖然沒(méi)有
- 表單元素的
change
等事件狮含、touch
系列各事件顽悼、tap
、longtap
事件也全面支持
附:
官方文檔及資料
09月23號(hào)在“微信公眾平臺(tái)”正式放出“公眾平臺(tái)小程序文檔和工具”的公告
- 開發(fā)文檔:
- quickstart程序源碼包:
- demo程序(能力展示):
- 微信公眾平臺(tái) · 小程序文檔:
- https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1474632113_xQVCl&token=&lang=zh_CN
- (目前似乎需復(fù)制鏈接再粘貼至地址欄訪問(wèn)几迄,不支持直接點(diǎn)擊的帶refer訪問(wèn))
體驗(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è)鍵擋住了映胁。木羹。。這里列一下: