最近在使用BUI Webapp
开发的一个小商城项目在微信上遇到一些坑及变态需求, 层层深刻, 整理一下给后来人参考. 必定有你还不知道的!html
问题描述: 微信打开的web页面默认是会缓存的,这是为了加载更快,原本是好事,但对于用来调试的咱们就比较痛苦了,往往更改一些js,html, 刷新之后,怎么样都去不掉. web
解决办法: 每次修改html 在后面增长? 参数, 每次修改js, 在页面引入的时候, 增长问号加时间戳的方式..但依然很痛苦. 浏览器
BUI Webapp
的处理方案: 缓存
index.js
微信
// 去除模块缓存 window.loader = bui.loader({ cache: false })
在路由初始化以前,先去掉模块的缓存, 这样每次进入页面,都会是一个新的脚本, 也就没有缓存问题了.app
问题描述: 跟前面的缓存有点关系,正常web页面第一次加载之后就会被缓存下来, 因此你想要后退并刷新,那是很差处理的. 框架
BUI Webapp
的处理方案:webapp
// 方案: 后退全局刷新 router.back({ callback: function(){ router.refresh() } })
问题描述: 若是说后退刷新还比较简单,那若是页面须要局部刷新呢, 客户就不想出现闪白. ide
BUI Webapp
的处理方案:工具
// 方案: 后退局部刷新 router.back({ callback: function(mod){ // mod为后退之后页面抛出来的模块. 你能够自定义你的局部方法处理. mod.init() } })
问题描述: 比方当前路由状态: 首页->列表页->表单页->成功失败-->列表页, 成功失败页
之后要跳回列表页
.
BUI Webapp
的处理方案:
// 方案: 后退2层刷新 router.back({ index: -2, callback: function(mod){ // mod为后退之后当前页面抛出来的list模块. 你能够自定义你的刷新处理. mod.init() } })
问题描述: 当你的页面有多个入口,入口的层级不一致, 经过索引后退的方式就不能用了,
比方表单页
, 入口1: 首页->列表页->表单页 入口2: 首页->表单页, 这时表单页的后退怎样才能后退到首页?
BUI Webapp
的处理方案:
// 方案: 经过指定模块名后退,模块名默认为页面的路径. `main` 则为首页已经声明的默认模块. router.back({ name: "main", callback: function(mod){ // mod为后退之后当前页面抛出来的模块. 你能够自定义你的刷新处理. mod.init() } })
问题描述: 首页底部有5个TAB, 我在表单页后退的时候,想后退到首页第4个tab-购物车
.
BUI Webapp
的处理方案:
main.js
loader.define(function(){ var pageview = {}; // slide 控件为BUI的TAB选项卡 pageview.slide = bui.slide(); pageview.init = function(){} pageview.init(); // 抛出main模块的方法 return pageview; })
form.js
// 方案: 经过指定模块名后退,模块名默认为页面的路径. `main` 则为首页已经声明的默认模块. router.back({ name: "main", callback: function(mod){ // mod为后退之后当前页面抛出来的main模块. 拿到slide调用控件的to方法,索引从0开始. mod.slide.to(2); } })
问题描述: 开发移动webapp少不了要对移动物理按键的监听,经过上面的方案咱们能够实现按钮点击的时候后退刷新, 而用户若是点击的是安卓的物理后退按键呢?
BUI Webapp
的处理方案: 经过在首页监听全局后退事件处理.
index.js
router.on("back",function(e){ var nowPid = e.target.pid, prevPid = e.prevTarget.pid; // 若是后退到首页则刷新 if( nowPid === "main" ){ // 加载首页模块的方法 loader.require(nowPid,function(mod){ mod.init(); }) } })
问题描述: 首页底部有4个TAB,当点击进入第2个页面的时候, 若是第2个页面也有TAB, 会被微信底部的工具栏遮挡, 这是苹果版微信独有的.
BUI Webapp
的处理方案: 这个坑是由于历史记录引发的, 针对IOS的路由初始化时去除历史纪录.
index.js
bui.ready(function () { // IOS版的微信,不须要同步历史记录 var needHistory = bui.platform.isIos() && bui.platform.isWeiXin() ? false : true; // 初始化路由 router.init({ id: "#bui-router", syncHistory: needHistory, }) })
问题描述: A页面有2个按钮, 点击分别跳转到B页面的2个TAB选项卡.
BUI Webapp
的处理方案:
A.js
$("#btn1").on("click",function(){ bui.load({ url: "pages/b.html", param: { index: 0 } }) }) $("#btn2").on("click",function(){ bui.load({ url: "pages/b.html", param: { index: 1 } }) })
B.js
// 接收页面传过来的参数 var param = router.getPageParams(); // 初始化选项卡在第几个 var slide = bui.slide({ index: param.index || 0, ... })
欢迎一块儿吐槽你遇到过的变态需求!!
BUI Webapp
是一个基于Zeptojs或jQuery的UI交互框架, 专一Webapp开发, 提供丰富的组件
,灵活的定制,超多的模板
及参考案例
, 帮助开发者快速构建Webapp, 最终能够在浏览器,微信公众号运行,以及结合Dcloud,ApiCloud,Appcan 等第三方平台打包成 Hybrid App, 完美适配, 一次开发, 多端运行, 并保持一致体验.