传单地图未更新视图

时间:2019-03-14 12:19:33

标签: javascript leaflet

我试图以模式显示地图,因此当我关闭它并打开一个新地图时,地图总是显示第一个位置,而不是当前模式。我重置了地图,但仍然没有任何反应。

在打开模式之前,我先打印地图:

$('#openMap').on($.modal.BEFORE_OPEN, function(event, modal) {
   printMap('map', coord);
});

关闭模式后,我删除了地图容器:

$('#openMap').on($.modal.AFTER_CLOSE, function(event, modal) {
   $('#map').remove();
});

这是printMap函数代码:

var map = null; // Global variable
function printMap(map_id, coord) {
    const mapbox_token = '...';

    if(map) {
        map.eachLayer(function (layer) {
          map.removeLayer(layer);
        });
        map.off();
        map.remove();
        map.on('viewreset', function (e) {
           console.log('Reset view...') // Do not showed
        })
        delete map;
        map = null;
        // none of these work
    }

  // Load map
  map = L.map(map_id).setView(coord, 13);

  // Create the tile layer with correct attribution
  L.tileLayer(...).addTo(map);

  // Add marker
  L.marker(coord).addTo(map);

  // Invalidate size for modal
  $('.modal').on($.modal.OPEN, function (event, modal) {
    setTimeout(function(){ map.invalidateSize()}, 0);
  });
}

希望有人可以帮助我! 预先感谢!

1 个答案:

答案 0 :(得分:0)

您的float: left变量是map函数的局部变量,即,每当您执行该函数时,它都会为其局部变量获得新的分配。因此,printMap在您检查时总是未初始化。

然后,当您使用map值在打开监听器之前附加模式时,可能会遇到范围问题。