版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32123133/article/details/76615383
转apicloud总结
暑假在做apicloud的app,这篇总结写的很好,记一下。
自己踩过的坑。。做个简单的记录:希望可以帮助有需要的人。
1. 手机加载日历,由于按业务需要,是要求动态加载input框个数,每个都可以点击触发日历。问题:动态添加进来的元素,点击并不能触发日历。解决:加载input框之前,加载日历插件的js和css,使事件生效。这是我封装的加载js和css的函数,直接调用就好。
function loadjscssfile(filename, filetype) {
switch (filetype) {
case "js":
var fileref = document.createElement('script');
fileref.setAttribute("type", "text/javascript");
fileref.setAttribute("src", filename);
document.body.appendChild(fileref);
break;
case 'css':
var fileref = document.createElement('link');
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", filename);
document.body.appendChild(fileref);
break;
}
}
2.还是日历上,手机点击input时会默认出来键盘,挡住日历,不便用户操作。我查了一下资料,发现还是这个方法最好用,也很好理解。
var C_Items = document.getElementsByClassName("C_Item")
for(var i= 0;i<C_Items.length;i++){
C_Items[i].addEventListener('focus',function(){
document.activeElement.blur();
})
}
取出所有input,组成数组,当有focus()事件的时候,触发blur(),就好。
3.关于清除缓存和版本信息,直接调用apicloud里封装好的getCacheSize获取缓存大小,clearCache清楚缓存。以及api.appVersion这个属性值,直接获取appVersion。
//异步返回结果:
api.getCacheSize(function(ret) {
var size = ret.size;
});
//同步返回结果:
var size = api.getCacheSize({
sync: true
});
api.clearCache(function() {
api.toast({
msg: '清除完成'
});
});
4.有时页面跳转会出现传值,页面复用,返回时会进入死循环,(两个页面互相返回),还有时会出现返回后,页面需要reload(),但是reload:true。又不是很好用,有局限性(页面是frame的时候,reload:true不起作用),这系列的页面跳转问题,可以用pageParam:{key:val}
的属性,传值给指定页面。刷新问题,可用sendEvent
将任意一个自定义事件广播出去,该事件可在任意页面通过 addEventListener 监听收到。
api.sendEvent({
name: 'myEvent',
extra: {
key1: 'value1',
key2: 'value2'
}
});
//html页面a:
api.addEventListener({
name: 'myEvent'
}, function(ret, err) {
alert(JSON.stringify(ret.value));
});
//html页面b:
api.addEventListener({
name: 'myEvent'
}, function(ret, err) {
alert(JSON.stringify(ret.value));
});
以上,a、b都将收到myEvent的事件,并进行页面的刷新,或者是局部刷新。