1

質問はとても簡単です。ページ「map1」を表示すると、Google マップが 1 回だけ読み込まれます。私の Web アプリケーションでは、緯度と経度の値を変更しましたが、表示されたマップは初めてです。毎回新しいポジションをロードしないのはなぜですか?

$(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 イベントがトリガーされたときに作成され、手動で削除するか、現在のマーカーの位置を変更しない限り、そこに残ります。

この問題には 2 つの解決策があります。

解決策 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 に答える