如何从HTML和javascript制作GWT小部件?

如何从HTML和javascript制作GWT小部件?,java,gwt,Java,Gwt,我需要从HTML和javascript代码中创建一个自定义GWT小部件。javascript代码应该在小部件上调用,但是javascript应该接收小部件DOM组件作为参数 此外,小部件的HTML必须直接依赖于提供给小部件构造函数的参数 做这件事的“惯用”方法是什么?很简单。您可以从扩展小部件类开始 要创建DOM表示,您需要使用Document.get()(或其他旧api,具体取决于您的喜好)。 要调用外部javascript,您需要使用 此外,您还必须重写onDetach和onAttach方法

我需要从HTML和javascript代码中创建一个自定义GWT小部件。javascript代码应该在小部件上调用,但是javascript应该接收小部件DOM组件作为参数

此外,小部件的HTML必须直接依赖于提供给小部件构造函数的参数


做这件事的“惯用”方法是什么?

很简单。您可以从扩展
小部件
类开始

要创建DOM表示,您需要使用
Document.get()
(或其他旧api,具体取决于您的喜好)。 要调用外部javascript,您需要使用

此外,您还必须重写
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());
     }

}
如中所述