我正在開發一個真正放鬆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