由于项目需要拥有三种地图切换功能,在设置里面配置默认地图,apicloud提供了四种数据存储机制,Local Storage,偏好数据,文件,数据库,local storage是对h5的localStorage的封装,项目使用在对当前app的一些临时数据存储,而一些常用配置,存放在偏好数据,类似于android的sharePerference,接口方法有 api.setPrefs()、api.getPrefs()、api.removePrefs(),其中 getPrefs() 有同步和异步的获取方法
//异步返回结果:
api.getPrefs({
key: 'userName'
}, function(ret, err) {
var userName = ret.value;
});
//同步返回结果:
var userName = api.getPrefs({
sync: true,
key: 'userName'
});
地图切换
通过对偏好数据的存储,每次进入地图后,获取指定的地图的pref值,动态引入对应的地图脚本,后执行相应的代码
稍微封装了下动态引入js文件的代码(习惯了nodejs的回调写法,由于移动端对promise支持情况,不做promise封装)
function loadScript(src, loadCb) {
var scriptEl = document.createElement("script");
scriptEl.type = "text/javascript";
if (typeof loadCb == "function") {
scriptEl.onload = function() {
var args = Array.prototype.slice.call(arguments);
args = [null].concat(args);
loadCb.apply(this, args);
};
scriptEl.onerror = function() {
loadCb.apply(this, arguments)
};
}
document.getElementsByTagName("head")[0].appendChild(scriptEl);
// document.currentScript.parentNode.insertBefore(scriptEl, document.currentScript);
scriptEl.src = src;
}
每次进入地图监控页面后,判断用户设置的地图类型,引入相关地图脚本文件后就可以执行对应的地图功能代码
var mapType = api.getPrefs({
sync: true,
key: 'mapType'
});
switch (mapType) {
case 1: {
loadScript("./bMap.js", function(errEvent, successEvent) {
if (!errEvent) {
// 百度地图相关代码
}
});
break;
}
case 2: {
loadScript("./googleMap.js", function(errEvent, successEvent) {
if (!errEvent) {
// google相关代码
}
});
break;
}
default: {
loadScript("./ols.js", function(errEvent, successEvent) {
if (!errEvent) {
// openlayers相关代码
}
})
}
}