微信小程序 - MINA 框架 学习笔记
来源:互联网 发布:无名氏定理 知乎 编辑:程序博客网 时间:2024/05/29 08:21
作为码农,似乎必须跟随潮流,兢兢战战,最近微信小程序横空出世,那么就一起来看看吧。
按惯例,先贴link为敬:http://bing.aliaii.com/wxopen/MINA.html
一、MINA
在阅读开发者文档之后,越发感觉微信小程序是一个由微信内置JS引擎启动的前端程序,打个比喻就是在微信的框架下写web应用。
而这个框架被称为MINA。
这是在百度随便找的一张微信现在的UI,实际上微信小程序与这个UI类似:
整个页面大致被分为三部分,上中下,最上面是一个导航栏,最下面是一个TAB的切换栏,而中间的page则是小程序最主要完成的部分。
而MINA这个框架也是围绕这三部分,让dev可以进行配置,嵌入引擎可执行的JS代码来完成功能。
所以MINA是微信小程序的核心框架,只有符合MINA规范的代码才能够被引擎正确调用,那么我们就来看看这个MINA。
二、从quickstart开始
可以看到大致分为三个部分 app.xx / pages / utils
utils是一些工具包,pages则是上图所述的每个page的代码,app.xx则是小程序的全局配置。
所以我们可以知道,微信小程序其实是一个app里面包括了若干page (1-5 文档说明page的最大上限是5个)
app -> global
page -> local
其实这里和extjs4+的MVC很相似,一个Ext.application作为入口,主要的页面构建和功能交由viewport和各种component完成。
我们来看看app.js
App({ onLaunch: function () { //调用API从本地缓存中获取数据 var logs = wx.getStorageSync('logs') || [] logs.unshift(Date.now()) wx.setStorageSync('logs', logs) }, getUserInfo:function(cb){ var that = this; if(this.globalData.userInfo){ typeof cb == "function" && cb(this.globalData.userInfo) }else{ //调用登录接口 wx.login({ success: function () { wx.getUserInfo({ success: function (res) { that.globalData.userInfo = res.userInfo; typeof cb == "function" && cb(that.globalData.userInfo) } }) } }); } }, globalData:{ userInfo:null }})
App是内置的注册方法,可以根据一个JS Obj来定义一个app对象,onLaunch、onShow、onHide分别表述了这个小程序的生命周期,同时可以定义其他全局方法/变量,如上述的getUserInfo/globalData,App内的其他page可以通过getApp()来获取app对象实例,继而调用这些全局方法/对象。
app.json
{ "pages": [ "page/index/index", "page/logs/index" ], "window": { "navigationBarTitleText": "Demo" }, "tabBar": { "list": [{ "pagePath": "page/index/index", "text": "首页" }, { "pagePath": "page/logs/logs", "text": "日志" }] }, "networkTimeout": { "request": 10000, "downloadFile": 10000 }, "debug": true}app.json是整个小程序的配置文件,指明了程序中的page,以及navigationBar和tabBar的style/link等,networkTimeout以及debug则是开发级别的配置
window节点在文档中只可以配置一些颜色以及字体样式,以及下拉刷新开关,而tabBar除了link以外也可以配置相应的icon,文本,颜色。
app.wxss 则和标准的css写法大致相同,为全局的样式表。
Page分为三个部分
js / wxml / wxss,js是由纯js代码构成,是page的逻辑部分,wxml类似HTML是page的视图部分,但必须使用MINA所提供的标签,wxss则是css的部分,使用也是相似的。
同时MINA也是一个MVVM框架,在wxml内可以使用特殊的命令属性来和js内的data绑定。
也应该注意的是全部代码运行在AppService内,并没有browsers上下文,也就意味着没有document/window,也不可以使用jquery等js lib。
Page({ data: { text: "This is page data." }, onLoad: function(options) { // Do some initialize when page load. }, onReady: function() { // Do something when page ready. }, onShow: function() { // Do something when page show. }, onHide: function() { // Do something when page hide. }, onUnload: function() { // Do something when page close. }, // Event handler. viewTap: function() { this.setData({ text: 'Set some data for updating view.' }) }})
Page是一个注册函数,传入一个js obj进行配置(如果你有extjs经验,应该习以为常)
主要的节点是data和onXX所表示的生命周期函数,也可以自定义一些方法,这些方法可以在wxml内使用,作为事件的handler(如果你有angularjs或者vue.js经验,应该习以为常)
但有一点不同的是并不能通过this.data.text来进行MVVM的双向绑定,必须通过this.setData({...})来完成 js -> view的数据绑定
<view>{{text}}</view><button bindtap="changeText"> Change normal data </button><view>{{array[0].text}}</view><button bindtap="changeItemInArray"> Change Array data </button><view>{{obj.text}}</view><button bindtap="changeItemInObject"> Change Object data </button><view>{{newField.text}}</view><button bindtap="addNewField"> Add new data </button>
在wxml内通过{{}}进行绑定。也提供了wx:if 、wx:for-items、<template name/is> 、bindXXX、catchXX来完成模板以及事件/属性绑定(与Vue.js类似)
也提供了类似commonJS的模块化构建
每一个js文件都是一个独立的模块,可以通过
var test=require('test.js')function sayHello(name) { console.log('Hello ' + name + '!')}module.exports = { sayHello: sayHello}
在wx命名空间下框架提供了大量内置的方法,如果网络/媒体/数据/位置/界面等操作方法,大致可以完成远端数据交互,UX
结语:微信小程序可以看作是一个在微信内运行的web框架,dev只需按照约定就可以构建可运行的程序,而代码基本与前端编程无异,框架结合了MVVM的特性,在开发视角来看学习成本不大,最多的是js api的学习和运用。也因如此,借助于微信这一app来开发B/S程序,应该十分有趣。
- 微信小程序 - MINA 框架 学习笔记
- mina框架学习笔记
- MINA框架学习笔记
- Mina框架学习笔记(一)
- Mina框架学习笔记(二)
- Mina框架学习笔记(三)
- Mina框架学习笔记(四)
- Mina框架学习笔记(五)
- Mina框架学习笔记(六)
- Mina框架学习笔记(一)
- Mina框架学习笔记(二)
- Mina框架学习笔记(三)
- Mina框架学习笔记(四)
- Mina框架学习笔记(五)
- Mina框架学习笔记(六)
- Mina框架学习笔记(一)
- Mina框架学习笔记(二)
- Mina框架学习笔记(三)
- My SHA1 Achievement
- Eclipse下开发BPEL-HelloWorld
- [Win32]一个调试器的实现(九)符号模型
- 初始化列表的使用
- Linux如何用rpm安装软件
- 微信小程序 - MINA 框架 学习笔记
- samba 编译安装
- 854计算机基础——《计算机组成原理》考点汇总(二) 系统总线
- 一个小小的进步~
- 【UML】行为图
- 有些人就是见不得别人好
- centos 6.8下搭建PPTP VPN服务器
- 多进程加协程学习总结
- yii API接口设计