- javascript 更新逻辑相对复杂一些, 起首依然是一个接口来获取新的 javascript 代码:
- router.get('/generateJavascript', function* () {
- this.body = yield loadFile(this.query.path)
- this.type = 'text'
- })
然后我们在 window 对象上参加 Reload 函数履行具体的改换逻辑:
- window.Reload = function (e) {
- var pages = __wxConfig.pages;
- if (pages.indexOf(window.__wxRoute) == -1) return
- // 调换本来的构造函数
- f[window.__wxRoute] = e
- var keys = Object.keys(p)
- // 剖断是否当前应用中页面
- var isCurr = s.route == window.__wxRoute
- keys.forEach(function (key) {
- var o = p[key];
- key = Number(key)
- var query = o.__query__
- var page = o.page
- var route = o.route
- // 页面已经被创建
- if (route == window.__wxRoute) {
- // 履行封装后的 onHide 和 onUnload
- isCurr && page.onHide()
- page.onUnload()
- // 创建新 page 对象
- var newPage = new a.default(e, key, route)
- newPage.__query__ = query
- // 从新绑定当前页面
- if (isCurr) s.page = newPage
- o.page = newPage
- // 履行 onLoad 和 onShow
- newPage.onLoad()
- if (isCurr) newPage.onShow()
- // 更新 data 数据
- window.__wxAppData[route] = newPage.data
- window.__wxAppData[route].__webviewId__ = key
- // 发送更新事宜, 通知 view 层
- u.publish(c.UPDATE_APP_DATA)
- u.info("Update view with init data")
- u.info(newPage.data)
- // 发送 appDataChange 事宜
- u.publish("appDataChange"
推荐阅读
CIO半月刊第十二期|打造“智慧交通”,保障城市高效、安全、智能化运行
【义务编辑:谢海平 TEL:(010)68476606】 >>>详细阅读
本文标题:微信小程序架构分析 (下)
地址:http://www.17bianji.com/lsqh/35676.html
1/2 1