Google マップと同様に、任意の HTML を含むマップ ポップアップを作成できる GWT ライブラリ (gwt-openlayers) を使用しています。GWT ボタン ウィジェットを含めるには、この HTML が必要です。
次のように、オンザフライでいくつかの 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 に追加します)。ポップアップが表示された後、次のように Element を取得し、その周りに 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";
いくつかのブレークポイントを入れましたが、2 番目のアサーションが失敗しているようです!
なぜこれが当てはまるのか、誰にも分かりますか?このアサーションに失敗すると、本当にメソッドの完全な失敗 (戻りなし) になるのでしょうか?