Карты Google на PhoneGap не отображаются полностью

У меня проблема с тем, что в моих Картах Google отображаются только верхние листы (очень похоже на эту проблему PhoneGap + JQuery Mobile + Google Maps v3: карта показывает верхние левые листы?), Но в iOS и с картой jQuery UI Map. Однако это происходит только после того, как я поигрался с приложением в течение некоторого времени, переключая вкладки (он отлично работает в браузере рабочего стола, не работает только в приложении устройства)

Я пробовал несколько решений из других постов (как вы можете видеть из кода), но моя проблема немного отличается, так как сначала это не происходит

Вот мой HTML

<div data-role="page" id="page3" data-url="page3" tabindex="0" style="padding-bottom:19px">
....
    <div data-role="content" id="ct">
        <div id="map_canvas" style="height:100%"></div>
    </div>
....
</div>

И JS

$(document).bind('pagechange', function () {
if ($.mobile.activePage.attr('id') === 'page3') {

    if (!mapInited) {
        mapInited = true;
        $('#map_canvas').gmap().bind('init', function () {

            var bounds = new google.maps.LatLngBounds();
            navigator.geolocation.getCurrentPosition(locSuccess, locError);
            $.each(markers, function (i, marker) {
                var latlong = new google.maps.LatLng(marker.latitude, marker.longitude);
                bounds.extend(latlong);
                $('#map_canvas').gmap('addMarker', {
                    'position': latlong,
                    'bounds': true,
                    'primaryColor': "#0000FF",
                    'icon': './img/train.png'
                }).click(function () {
                    $('#map_canvas').gmap('openInfoWindow', {
                        'content': marker.content
                    }, this);
                });

            });
            $('#map_canvas').css('height', getRealContentHeight());
            $('#map_canvas').css('width', '100%');
            google.maps.event.trigger($('#map_canvas'), "resize");
            setTimeout(function () {
                google.maps.event.trigger($('#map_canvas'), 'resize');
            }, 500);
        });
    }
  }
 });
}

Заранее спасибо за любые мысли

"Исправлена" проблема с очень некрасивым обходом. В основном я воссоздаю карту каждый раз, когда страница загружается, вот так

if (!mapInited)  mapInited = true;
else { $('#map_canvas').remove(); $('#ct').append('<div id="map_canvas" style="height:100%"></div>'); }

2 ответа

Если вы используете jquery-ui-map, почему вы используете нативный API Google Maps вместо функций gmap?

Почему бы не позвонить $('#map_canvas').gmap('refresh');

Вы запускаете событие resize для объекта jQuery, что не будет иметь никакого эффекта, потому что вы должны вызвать событие для google.maps.Map-пример:

google.maps.event.trigger($('#map_canvas').gmap('get','map'),'resize');

Вы также можете использовать плагин-метод triggerEvent чтобы вызвать событие:

 $('#map_canvas').gmap().triggerEvent('resize');
Другие вопросы по тегам