是否可以构建独立的小部件而不是 GWT 中的完整应用程序?例如,我可以使用创建滑块小部件作为 jquery 插件,并使用它向我现有的 HTML 页面(可能是 JSF 或 JSF 等生成 HTML)添加交互性以及来自第三方的其他一些基于 jquery 的小部件同一页?这可能与 GWT 吗?
问问题
392 次
3 回答
1
简短的回答是肯定的。基本上,您的 html 页面有一个容器,用于存放具有指定 ID 的 gwt 小部件。然后在你的 gwt 模块中你会这样写:
RootPanel.get("ContainerId").add(MyWidget)
请记住,这可能会变得复杂,尤其是在 gwt 小部件和 html 页面之间进行通信时。
于 2012-04-05T20:48:19.823 回答
0
看看GWT 导出器。
它最初是为了让非 GWT 开发人员可以使用 Chronoscope:http ://code.google.com/p/gwt-chronoscope/
于 2012-04-06T11:21:23.700 回答
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 以防止内存泄漏。
于 2012-04-13T14:19:54.207 回答