是否可以构建独立小部件而不是GWT中的完整应用程序?例如,我可以使用创建滑块小部件作为jquery插件,并使用它来添加交互性到我现有的HTML页面(可能是JSF或JSF等生成的HTML)以及来自第三方的其他一些基于jquery的小部件同一页?这可能与GWT有关吗?
答案 0 :(得分:1)
简短的回答是肯定的。基本上你的html页面有一个容器,用于具有指定id的gwt小部件。然后在你的gwt模块中你写下这个:
RootPanel.get("ContainerId").add(MyWidget)
请记住,这可能会变得复杂,尤其是当涉及到gwt小部件和html页面之间的通信时。
答案 1 :(得分:0)
查看GWT Exporter。
最初构建它是为了让Chronoscope可供非GWT开发人员使用:http://code.google.com/p/gwt-chronoscope/
答案 2 :(得分:0)
是的,您可以,并且一些标准小部件已经实现了静态方法,无需使用Rootpanel即可附加它们(因此您可以执行“DOM编程”),例如查看HTML Widget。它有静态方法包装用于此目的:
public static HTML wrap(Element element) {
// Assert that the element is attached.
assert Document.get().getBody().isOrHasChild(element);
HTML html = new HTML(element);
// Mark it attached and remember it for cleanup.
html.onAttach();
RootPanel.detachOnWindowClose(html);
return html;
}
因此,在您的代码中,您可以使用它将小部件附加到现有DOM元素:
HTML html = HTML.wrap(Document.get().getBody().getFirstChildElement());
//or using selector engine (maybe wrapped Sizzle?):
HTML html = HTML.wrap(GSizzle.findOne("div.someClass:first"));
您可以在窗口小部件中创建类似的静态方法:
class MyWidget extends Widget {
public static MyWidget wrap(Element element) {
MyWidget w = new MyWidget(element);
w.onAttach();
RootPanel.detachOnWindowClose(w);
return w;
}
//Widget has protected constructor Widget(Element)
//but it only creates widget but onAttach is called as Widget
//is added to Parent Widget-Panel
protected MyWidget(Element e) {
super(e);
}
//"plain" constructor for widget-panel-workflow
public MyWidget() {
super(Document.get().createDivElement());
}
}
但关键是在附加到dom之前调用小部件受保护的方法onAttach - 它将小部件订阅到全局dom事件广播器,并在小部件上调用RootPanel.detachOnWindowClose以防止内存泄漏。