HTMLとJavaScriptコードからカスタムGWTウィジェットを作成する必要があります。javascriptコードはウィジェットで呼び出す必要がありますが、javascriptはウィジェットのDOMコンポーネントをパラメーターとして受け取る必要があります。
また、ウィジェットのHTMLは、ウィジェットのコンストラクターに与えられた引数に直接依存している必要があります。
これを行う「慣用的な」方法は何ですか?
とても簡単です。Widget
クラスを拡張することから始めることができます。
DOM表現を作成するには、を使用する必要がありますDocument.get()
(または、他の古いAPIは好みによって異なります)。外部JavaScriptを呼び出すには、 JSNIを使用する必要があります。
onDetach
また、メソッドとメソッドをオーバーライドするonAttach
必要があるため、要素がdomに追加されたとき、および外部JSがクリーンアップを実行する必要があるとき(必要な場合)に外部JSに通知できます。
コード例:
public class MyWidget extends Widget{
public MyWidget(String params) {
Document document = Document.get();
DivElement divElement = document.createDiv();
divElement.setInnerHtml(params);
setElement(divElement); //important, widget needs to know it's root element
}
private static native void doJsMagic(Element element)/*-{ //notifies js about element
$wnd.doSomething(element);
}-*/;
private static native void undoJsMagic(Element element)/*-{
//notifies js that it should do some cleanup (if needed)
//since it is unaware of GWT widget lifecycle
$wnd.undoSomething(element)
}-*/;
@Override
public void onAttach() {
super.onAttach();
doJsMagic(getElement());
}
@Override
public void onDetach() {
super.onDetach();
undoJsMagic(getElement());
}
}