时间:2019-05-07 来源:小程序工厂
永***:
微信自家的公众号也是这样的,我觉得其实是不太好解决。
因为新建一个 WebView,并非是复用同一个对象,没法用单例模式呀。
日常开发中为了解决这个问题,我多半使用的是变量加回调来阻止。
并非限制在新建对象上,而是对事件触发本身做了规定。事件内函数不运行完,不能点下一次。
其实这个方案是不太妙的,希望能看到更好的办法。
A***:
谢谢你,用变量阻止解决了。
接口返回的图片地址,image组件有地址,但是不显示图片。
永***:
还想到另外一种,俗称节流,也就是固定间隔时间,1s 内只能点一次这种,其实也不妙。
A***:
var isTouch=false;
Page({
......
onShow: function () {
isTouch=false;
},
event...:function(e){
if(isTouch) return;
isTouch = true;
......
}
})
//我是这样做的,总觉得代码怪怪的
永***:
我会这样写,应该属于代理模式,我不太懂算法。
// fn 不运行完,再次调用 once 也没用
function once(fn) {
var state = false;
return function() {
if (state) return;
state = true;
fn && fn.apply(this, arguments);
state = false;
}
}
Page({
click: function(e) {
once(() => {
console.log(this, e)
})()
},
})
其实判断 fn 的结束应该是写在 fn 的回调里的,但那样的话就越改越复杂了,除非可以用 await 写法。
官方文档中有几个字写错了+微信小程序教程
A***:
优雅,学习了
永***:
唔...写错了,第二次运行 once 时 state 是新的。
修改:Page 里得去掉那层 function。惭愧惭愧