微信小程序开发问题总结(1)

微信小程序开发问题总结(1)

项目外包研发小伙伴开发的小程序,遇到2个问题解决不了:

  1. 某同事Z的小米6手机,打开小程序,在选择法院界面,搜索输入任何内容都没有搜索结果。周围其他同事手机上没遇到问题。
  2. 某同事C的华为mate手机,进入法院选择页面,选择法院后跳转回首页,选择的结果未刷新。周围其他同事手机上能正常。

问题1

同样的程序,周围其他人手机上正常,说明可能跟环境有关。

远程调试,跟踪代码的时候发现,代码写法不严格,很多语句结尾没有加封号。相关的js文件里,把代码的结尾封号都加上,再远程调试,就好了。

原因推测:微信针对不同的Android手机平台,编译了不同版本的js引擎。

总结:虽然js语法宽松,但是为了避免出现莫名其妙的问题,代码写法需要保持严格。这是个低级错误。

问题2

首页(/homepage/homepage)相关代码:

1
2
3
4
5
onLoad: function(options) {
// ...
var courtName = wx.getStorageSync('courtName');
// 更新首页中已选择法院输入框的值
}

法院选择页(/court/court)相关代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
bindcourt: function (e) {
var courtName = e.currentTarget.dataset.court; //选中的法院名称
var courtId = e.currentTarget.dataset.cid; //选中的法院ID
wx.setStorageSync('courtName', courtName);
wx.setStorageSync('courtId', courtId);
wx.switchTab({
url: '../homepage/homepage',
success: function (e) {
var page = getCurrentPages().pop();
if (page == undefined || page == null) return;
page.onLoad();
}
});
}

代码说明:在法院选择页,选中了法院之后,将选择结果保存到本地存储(小程序即使退出,下次进入也要默认使用最后一次的选择结果,所以存储)。然后调用switchTab返回首页,switchTab的success回调中,调用getCurrentPages()获取当前页,然后调用onLoad进行主动刷新。

上述代码有几个问题:

  1. 在switchTab的回调中去调用getCurrentPages(),可能会有同步问题,不能保证得到的页面就是目标页面。
  2. getCurrentPages().pop() 修改了页面栈,可能引发未知问题。
  3. 首页的onLoad是事件函数,一个页面只会调用一次。

解决方法:

  1. 首页在onShow事件中进行页面的刷新处理。
  2. 移出swtichTab中的回调处理代码。

感悟

编程习惯也是非常重要的技能,不好的编程习惯,误用的方法会引入莫名其妙的问题。