我正在开发一个真正放松Google地图的jQuery Mobile应用程序。虽然我反复尝试,但似乎无法处理页面转换和映射持久性。在jQuery Mobile中加载页面之间保留Google地图
我真的很愿意这样做,而我的工作方式就像是某种我不喜欢的肮脏解决方法。
我有这个功能上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');
}
就是这样。有用。首先检查地图是否已经初始化,如果它已经丢失了内部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
变量时我导航到另一个页面。这听起来很肮脏,因为我说,我想检查未定义的对象,以恢复地图,因为它正在工作,记录对象显示我一个谷歌地图对象。
我严格想避免使用rel="external"
,因为这打破了应用程序。您不能将它安装在主页中,也不能使PhoneGaps应用程序具有这些属性,所以...您如何看待它?
你在哪里没错。我无法找到错误,因为在我的测试中,我只是想在页面之间快速移动。改为:else if(BuSeViCi.mapBounds)BuSeViCi.map.fitBounds(BuSeViCi.mapBounds);诀窍!谢谢你的帮助 :-) – 2012-05-24 07:55:01