由于项目需要拥有三种地图切换功能,在设置里面配置默认地图,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相关代码
            }
        })
    }
}