是否有可能使用GWT构建像独立小部件(如滑块或日期选择器等)的jquery?

时间:2012-04-05 20:13:18

标签: java javascript jquery gwt

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

3 个答案:

答案 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以防止内存泄漏。