我认为这是 google map 的 GWT 绑定的 map 3.8.0 预发布版本中的一个错误,但在我走这条路之前,我想我会和你们一起核实一下。当我创建地图然后尝试将新创建的地图面板/小部件添加到包含面板中时,出现异常。如果我在包含现有 html div 的面板中创建地图,它会毫无例外地显示,但无论哪种方式,如果它在 HTML 中有一个 div 或没有,如果我尝试将它添加到任何其他面板,它都会引发异常。
它通常抛出的异常是:
gwt-google-apis gwt-map-3.8.0-pre throws JavaScriptException 'map' is not defined.
我还有其他例外,但除非它们变得相关,否则让我们暂时忽略它们。
这是我获得图书馆的链接: http ://code.google.com/p/gwt-google-apis/downloads/detail?name=gwt-maps-3.8.0-pre1.zip&can=2&q=
顺便说一句,我使用 java 1.5 编译器重新编译了原始源代码,但我没有更改任何内容。
作为背景,我正在移植一个为谷歌地图 v2 到 v3 编写的应用程序。在当前的生产版本中,MapWidget 对象被添加到一个 VerticalPanel(即 html 表)中,该对象被添加到另一个 VerticalPanel 中,......最终通过门户提供服务。如果我必须更改此结构,这将是更广泛的重写,因此我将不胜感激您提供的任何见解。
我在主题上尝试了许多变体,结果相似。很多时候地图会显示,但显示为灰色,然后如果您通过控件与地图交互,它通常会自行排序,有时不会。它是 IE-8 还是 firefox 似乎并不重要。
我的代码如下所示:
LatLng myLatLng = LatLng.create(39.571993, -104.998184);
MapOptions myOptions = MapOptions.create();
myOptions.setZoom(16.5);
myOptions.setCenter(myLatLng);
myOptions.setMapTypeId(MapTypeId.SATELLITE);
//com.google.gwt.dom.client.Element mapDiv = Document.get().getElementById("map_canvas");
RootPanel root = RootPanel.get("MAP1_NetworkMapContainer");
//HTMLPanel mapPanel = HTMLPanel.wrap(mapDiv);
//mapPanel.setHeight("100%");
//map = GoogleMap.create(mapPanel.getElement(), options);
try {
root.add(mapPanel);
} catch (Exception e) {
Log.error("Received Exception ", e);
String error = e.toString();
}
...作为一个小部件,也就是它在 3.0.2 的源代码中完成的方式
public class MapWidget extends Widget {
final private static String EXCEPTION_NOT_ATTACHED
= "Map widget must be attached to window's document.";
private GoogleMap map;
public MapWidget(MapOptions options) {
setElement(Document.get().createDivElement());
map = GoogleMap.create(getElement(), options);
}
... 作为 SimplePanel 的扩展
public class MapPanel extends SimplePanel {
final private static String EXCEPTION_NOT_ATTACHED
= "Map Panel must be attached to window's document.";
private GoogleMap map;
public MapPanel(MapOptions options) {
map = GoogleMap.create(getElement(), options);
}
结果总是一样的。如果我的 GWT 小部件在 HTML 中有一个 div 的元素 id,它会显示 OK,但如果我尝试添加创建的 div 或 html div 的结果,然后将其附加到根面板,则会引发异常。它是根面板还是任何其他类型的面板似乎并不重要。我将 mapPanel 添加到其中。