1

这个问题很简单;如果我显示页面“map1”,谷歌地图只会加载一次。在我的 web 应用程序中,我更改了 latitute e longitude 的值,但显示的地图是第一个。为什么不每次都加载一个新位置?

$(document).on('pageshow', '#map1', function () {

    var lat = (localStorage.getItem('lat'));
    var lng = (localStorage.getItem('lng'));

    console.log(lat + ',' + lng);
    alert("!");

    $('#map_canvas2').gmap({
        'center': '' + lat_det + ',' + lng_det + '',
        'zoom': 10,
        'disableDefaultUI': true,
        'callback': function () {
            var self = this;
            self.addMarker({
                'position': this.get('map').getCenter()
            }).click(function () {
                self.openInfoWindow({
                    'content': 'Position'
                }, this);
            });
        }
    });

    map_element2 = document.getElementById("map_canvas2");

    var mapwidth2 = $(window).width();
    var mapheight2 = $(window).height();
    $("#map_canvas2").height(mapheight2);
    $("#map_canvas2").width(mapwidth2);

    google.maps.event.trigger(map_element2, 'resize');

});
4

2 回答 2

1

如果我对您的理解正确,那么您的做法是错误的。

您的地图是在第一次触发 pageshow 事件时创建的,除非您手动将其删除或更改当前标记位置,否则它将保留在那里。

这个问题有两种可能的解决方案。

解决方案 1

在地图页面隐藏事件中删除当前地图

$(document).on('pagehide', '#map1', function () {
    $.mobile.activePage.find('#map_canvas2').empty();
});

下次您浏览页面时,它将重新创建。

解决方案 2

侵入性较小的解决方案是将您的标记保存为全局变量并更改它(如果它存在,如果不创建一个新变量),如下所示:

function changeMarkerPosition(marker) {
    var latlng = new google.maps.LatLng(-24.397, 140.644);
    marker.setPosition(latlng);
}
于 2013-07-04T15:30:20.550 回答
0

好的,我通过以下方式解决了在外部页面上加载地图的问题:

<a href="map.html" rel="external" data-ajax="false" >

在这种模式下,代码可以完美运行。

希望这对某人有所帮助。

于 2013-07-04T17:37:42.723 回答