如何在Bing Maps JavaScript V8中动态设置语言

时间:2018-04-27 08:20:03

标签: javascript bing-maps

问题在于,当我使用一种语言加载Map并希望将其更改为另一种语言时。 我试着这样做:

  1. map.dispose()
  2. 使用 setLang setMkt
  3. 添加<script/>
  4. 再次创建地图
  5. 但这种方式不起作用......它只是加载我的本地语言。

    可行的决定:

    let map = new Microsoft.Maps.Map(el, {credentials: key});
    // remove map
    map.dispose();
    
    // create script and insert it
    let script = document.createElement('script');
    
    window.GetMap = function() {
        delete window.GetMap;
        // 1. remove script tag
       //  2. Now we create map again when script was loaded
       map = new Microsoft.Maps.Map(el, {credentials: key});
    }
    
    // NOTICE: we set language AND user location both
    script.src = "https://www.bing.com/api/maps/mapcontrol?callback=GetMap&setLang=zh&UR=CN";
    document.head.append(script);

1 个答案:

答案 0 :(得分:0)

您的代码存在的问题是Bing Maps控件异步加载了大量其他资源,因此在创建新的地图实例时,资源尚未加载。这是一个延迟加载地图控件的代码示例,它将等待所有资源加载。

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8" />

    <script type='text/javascript'>
    var map;

    function loadMap() {
        if (!map) {
            var mapScriptUrl = 'https://www.bing.com/api/maps/mapcontrol?callback=GetMap&key=[YOUR_BING_MAPS_KEY]';
            var script = document.createElement("script");
            script.setAttribute('defer', '');
            script.setAttribute('async', '');
            script.setAttribute("type", "text/javascript");
            script.setAttribute("src", mapScriptUrl);
            document.body.appendChild(script);
        }
    }

    function GetMap()
    {
        map = new Microsoft.Maps.Map('#myMap', {});
    }
    </script>
</head>
<body>
    <input type="button" onclick="loadMap()" value="Load Map"/>
    <div id="myMap" style="position:relative;width:800px;height:600px;"></div>
</body>
</html>

现在,这将解决计时问题,但是在同一页面中将地图控件加载两次可能会导致问题。