0

我正在开发一个真正依赖谷歌地图的 jQuery Mobile 应用程序。尽管我一遍又一遍地尝试,但似乎我无法处理页面转换和地图持久性。

我真的致力于这样做,而我让它工作的方式就像某种我根本不喜欢的肮脏的解决方法。

我有这个在 pageShow 上为地图页面运行的函数:

initMap : function (){
    if (!Mapper.map || !$('#canvasMapa div').length){ // Or has been removed weirdessly
        var mapOptions = {
            zoom : 13,
            center: new google.maps.LatLng (37.38264, -5.996295), 
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            disableDefaultUI: true // Disabling buttons and stuff
        };
        // We create a new one
        Mapper.map = new google.maps.Map(document.getElementById('canvasMapa'),mapOptions);
        if (Mapper.localStorage && !Mapper.favsLoaded)
            Mapper.loadFavorites();
        if (Mapper.markers.length)
            Mapper.recolocateMarkers();
    }
    else {
        console.log(Mapper.map);
        Mapper.map.fitBounds(Mapper.mapBounds);
    }


    $('#mapa').die('pageshow');
}

就是这样。有用。第一个 if 检查地图是否已初始化以及是否丢失了内部 div,这种情况不时发生,但它会重新加载地图。加载地图时,它会检查应用程序中是否有任何标记,以便可以在新地图中重新分配。

这适用于在同一页面中加载对话框。随心所欲。

然后是应用程序的导航。每当您转到另一个页面时,就会发生奇怪的事情。这是我在切换到页面并返回地图时在控制台上看到的错误。

但是,地图仍然有效:

Uncaught TypeError: Cannot call method 'getSouthWest' of undefined
c
I.fitBounds
I.fitBounds%7Bmain,geometry%7D.js:38
S%7Bmain,geometry%7D.js:24
I.fitBounds%7Bmain,geometry%7D.js:38
BuSeViCi.initMapapp.js:78
f.event.dispatchjquery-1.7.1.min.js:3
f.event.add.h.handle.ijquery-1.7.1.min.js:3
f.event.triggerjquery-1.7.1.min.js:3
f.fn.extend.triggerjquery-1.7.1.min.js:3
e.extend.eachjquery-1.7.1.min.js:2
e.fn.e.eachjquery-1.7.1.min.js:2
f.fn.extend.triggerjquery-1.7.1.min.js:3
a.Widget._triggerjquery.mobile.min.js:17
(anonymous function)jquery.mobile.min.js:43
f.Callbacks.njquery-1.7.1.min.js:2
f.Callbacks.o.fireWithjquery-1.7.1.min.js:2
f.Callbacks.o.firejquery-1.7.1.min.js:2
wjquery.mobile.min.js:41
f.fn.extend.on.ejquery-1.7.1.min.js:3
f.event.dispatchjquery-1.7.1.min.js:3
f.event.add.h.handle.ijquery-1.7.1.min.js:3

指向 app.js 的行是这样说的:Mapper.map.fitBounds(Mapper.mapBounds);

我所做的唯一解决方法是在Mapper.map导航到另一个页面时清除该变量。正如我所说,这听起来真的很脏,我想检查未定义的对象以恢复地图,因为它正在工作并且记录该对象向我显示了一个 Google Maps 对象。

严格要避免使用rel="external",因为这会破坏应用程序。你不能在主页上安装它,也不能用这些属性制作PhoneGaps应用程序所以......你怎么看?

4

1 回答 1

1

该错误意味着它Mapper.mapBounds为空,但这里没有足够的信息来确定为什么会这样。

于 2012-05-24T07:03:12.527 回答