2009-10-29 30 views
0

我正在使用GWT進行谷歌地圖應用。我使用Google的gwt-maps.jar來映射api。GWT MapWidget from javascript as GMap2

我可以創建一個映射爲

private MapWidget mapId; 

if (Maps.isBrowserCompatible()) { 
    mapId = new MapWidget(); 

    mapId.setPixelSize(600, 500); 
    RootPanel.get("gmap").add(mapId); 

    mapId.setCurrentMapType(MapType.getHybridMap()); 
    mapId.addControl(new LargeMapControl()); 
    mapId.addControl(new MapTypeControl()); 
    mapId.addControl(new ScaleControl()); 

    mapId.setCenter(LatLng.newInstance(-33.867139, 151.20711), 9); 
    } 

現在我有一些遺留的JavaScript代碼,需要此地圖對象上工作。我想用這樣的東西:

$wnd.mapId.addOverlay(ovrlay1); 

但我不能得到這個$ wnd.mapId變量。你知道有什麼方法從某個元素上的現有地圖獲取GMap2對象嗎?如果我從我的「gmap」div中獲得GMap2實例,它將起作用。

目前我正在使用JSNI來生成所有的地圖功能。類似於:

$wnd.mapId = new $wnd.GMap2($wnd.document.getElementById("gmap")); 

回答

0

看起來我必須自己來回答這個問題。 MapWidget對象可以使用getPeer()方法返回JavaScript對象的句柄。所以我需要通過調用getPeer來綁定一個JavaScript對象。以下代碼執行此操作。

private MapWidget mapId; 

if (Maps.isBrowserCompatible()) { 
    mapId = new MapWidget(); 
    nativeExportMapPeer(mapId.getPeer()); 
    ... 
} 

... 

// export the native GMap2 object with a JSNI method 
private static native void nativeExportMapPeer(JavaScriptObject peer) /*-{ 
     $wnd.mapId = peer; 
}-*/; 

感謝Eric Z. Ayers指出了這一點。