2012-04-05 3 views
1

Ist es möglich, eigenständige Widgets im Gegensatz zu vollständigen Anwendungen in GWT zu erstellen? Zum Beispiel könnte ich ein Slider-Widget als jquery-Plugin erstellen und es verwenden, um Interaktivität zu meiner bestehenden HTML-Seite (die ein JSF- oder JSF-generiertes HTML sein kann) neben einigen anderen jquery-basierten Widgets von Drittanbietern hinzuzufügen die gleiche Seite? Ist das mit GWT möglich?Ist es möglich, jquery wie eigenständige Widgets (wie Schieberegler oder Datumsselektoren etc.) mit GWT zu erstellen?

Antwort

0

Ja, Sie können, und einige von Standard-Widgets allready statische Methoden implementiert haben, ohne Verwendung von Rootpanel zur Befestigung (so können Sie tun " DOM-Programmierung "), zum Beispiel HTML-Widget betrachten. Es hat statische Methode wrap für diesen Zweck:

HTML html = HTML.wrap(Document.get().getBody().getFirstChildElement()); 

//or using selector engine (maybe wrapped Sizzle?): 
HTML html = HTML.wrap(GSizzle.findOne("div.someClass:first")); 

Sie können machen ähnliche statische Methode in Ihrem 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; 
} 

so in Ihrem Code Sie es zum Anbringen Widget an bestehende DOM-Elemente verwenden können

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()); 
    } 
} 

aber entscheidend ist, Widgets Methode onAttach geschützt zu rufen, bevor sie dom Befestigung - es das Widget globalen dom Ereignis-Broadcaster abonniert hat, und ruft RootPanel.detachOnWindowClos e auf Ihrem Widget, um Speicherlecks zu vermeiden.

1

Kurze Antwort ist ja. Im Grunde hat Ihre HTML-Seite einen Container für das gwt-Widget mit einer bestimmten ID. Dann in Ihrem gwt Modul würden Sie schreiben:

RootPanel.get("ContainerId").add(MyWidget) 

Denken Sie daran, kann dies kompliziert, vor allem, wenn wenn betweek der GWT-Widget und die HTML-Seite um Kommunikation geht.

Verwandte Themen