1

是否可以构建独立的小部件而不是 GWT 中的完整应用程序?例如,我可以使用创建滑块小部件作为 jquery 插件,并使用它向我现有的 HTML 页面(可能是 JSF 或 JSF 等生成 HTML)添加交互性以及来自第三方的其他一些基于 jquery 的小部件同一页?这可能与 GWT 吗?

4

3 回答 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 回答