我正在使用一个 GWT 库 (gwt-openlayers),它允许我创建一个包含任意 HTML 的地图弹出窗口,类似于 Google 地图。我需要这个 HTML 来包含一个 GWT Button 小部件。
我正在像这样动态创建一些 HTML 元素:
Element outerDiv = DOM.createDiv();
outerDiv.getStyle().setOverflow(Overflow.HIDDEN);
outerDiv.getStyle().setWidth(100, Unit.PCT);
outerDiv.appendChild(new HTML(mapPOI.getHtmlDetails()).getElement());
Button popupButton = new Button("View Property");
popupButton.getElement().getStyle().setFloat(com.google.gwt.dom.client.Style.Float.RIGHT);
outerDiv.appendChild(popupButton.getElement());
然后我通过调用获取这些元素的源 HTML
String src = outerDiv.toString();
并将这个 html 插入到我的地图标记中。现在我的地图标记显示内容正常,包括按钮。但是,按钮不会响应任何事件!据我所知,这是因为永远不会调用按钮 onAttach() 方法。
有一个更好的方法吗?
谢谢,
乔恩
~~~~编辑~~~~
我现在正在尝试一种新的方法,这似乎是查看其他类似帖子的公认方法。
首先,我正在创建我的 div:
String divId = "popup-" + ref;
String innerHTML = "<div id=\"" +divId + "\"></div>";
然后我将它添加到我的地图弹出窗口并显示它(将它添加到 DOM)。显示弹出窗口后,我得到如下元素并尝试在其周围包裹一个 HTMLPanel:
Element element = Document.get().getElementById(divId);
HTMLPanel popupHTML = HTMLPanel.wrap(element);
我的 div 元素已成功检索。然而,HTMLPanel.wrap(element);
并没有完成。原因是wrap(..)
调用RootPanel.detachOnWindowClose(Widget widget)
,其中包括以下断言:
assert !widgetsToDetach.contains(widget) : "detachOnUnload() called twice "
+ "for the same widget";
assert !isElementChildOfWidget(widget.getElement()) : "A widget that has "
+ "an existing parent widget may not be added to the detach list";
我放了一些断点,似乎第二个断言失败了!
有谁知道为什么会这样?这个断言失败真的会导致方法完全失败(不返回)吗?