2010-03-30 5 views
8

Ich habe gerade angefangen, mit GWT zu arbeiten, und ich erkenne bereits die außerordentliche Macht, die es besitzt. Ich komme aus einer Frontend-Welt, also ist das Java eine große Lernkurve, aber ich denke, das wird mir helfen, eine richtig angelegte App (html-weise) zu bauen, anstatt mich nur auf die Standard-GWT-Panels zu verlassen Tabellen für Layout oder überflüssige, absolut positionierte divs.GWT Html Layoutkonventionen

Die größte Sache, die mich im Moment jedoch bremst, ist zu entscheiden, wie man das Design meiner Seite richtig auslegt. Ich habe eine ziemlich standardmäßige 2-Col-Kopf-/Fußseite (feste Breite), die ich entwerfen möchte, aber ich bin kein Fan von allen zusätzlichen Divs/Styling usw., die zum Beispiel mit dem DockLayoutPanel kommen.

Ich denke, dass ich nur meine eigene Layout-Widget erstreckt Composite-schreiben, die HTMLPanels für die allgemeine Site-Layout hat
(glaube ich ... immer noch nicht vollständig, dass aus noch dachte, dh., Wie zu tun ich füge IDs auf diese Platte divs „#header“, „#nav“ etc ...)
dann kann ich andere Widgets in diesem

Layout hinzufügen

Aber die andere Sache, die ich zu sehen bin, ist, dass ich schreiben könnte, eine Layout-Klasse, die UiBuilder erweitert und gerade Divs in der Datei ui.xml enthält.

Ich frage mich nur, was ist die bevorzugte Methode für Site-Layout mit GWT? Dies wird nicht im Sinne anderer Widgets wiederverwendet, es wird einmal verwendet und meine Steuerelemente usw. werden darin platziert.

Alle Tipps oder Tricks werden sehr geschätzt! Und wenn ich das Boot komplett verpasst habe, lassen Sie es mich wissen

Antwort

8

Eine Kombination aus UI Binder und HTML Panel funktioniert am besten für uns.

In Ihrem .ui.xml, Platz Code ähnlich -

<gwt:HTMLPanel ui:field="container"> 



    <gwt:FlowPanel ui:field="header"></gwt:FlowPanel> 



     <gwt:HTMLPanel styleName="secondarynav"> 

      <gwt:FlowPanel ui:field="menuWidget"></gwt:FlowPanel> 

      <gwt:FlowPanel ui:field="someOtherWidget"></gwt:FlowPanel> 

     </gwt:HTMLPanel> 



     <gwt:FlowPanel styleName="secondarycontent"> 

      <gwt:FlowPanel ui:field="faqWidget"></gwt:FlowPanel> 

      <gwt:FlowPanel ui:field="advertisingWidget"></gwt:FlowPanel> 

     </gwt:FlowPanel> 



     <div class="content"> 
     <gwt:FlowPanel ui:field="mainContentWidget"/> 

     </div> 


     <div class="clearingDiv"/> 

    </div> 



    <gwt:FlowPanel ui:field="footer"></gwt:FlowPanel> 

</gwt:HTMLPanel> 

In der entsprechenden .java Klasse, haben Sie Methoden wie setHeader(), setSecondaryNav(), SetMenu(), setFooter() etc.

Auf diese Weise ist Ihr Layout vollständig in Ihrer ui.xml definiert. Außerdem können Sie Widget-Abstraktionen verwenden. Das heißt, Sie können ein Header-Widget erstellen und dann die setHeader() -Methode in Ihrem Layout aufrufen, um es richtig zu platzieren.

+0

Das macht sehr viel Sinn für mich, aber mein Hauptproblem mit diesem ist das Hinzufügen von HTML-ID-Attribute. Vielleicht ist das in GWT nicht Standard und ich komme aus dem manuellen Codieren von HTML, aber ich mag es nicht, Klassen für Layoutdivs zu verwenden, die nur einmal verwendet werden. Irgendwelche Gedanken dazu? – brad

+0

Ja, Sie müssen durch die Rahmen springen, um die ID für Widgets festzulegen. GWT rät von der Verwendung von IDs in Widgets ab (mit Ausnahme von automatisierten Tests), da sie keine Möglichkeit bieten, sicherzustellen, dass die ID eindeutig ist. Also, obwohl Sie wissen, dass Sie Header nur einmal verwenden werden, kann GWT nichts darüber wissen. Aus diesem Grund wird die Methode setId() nicht verfügbar gemacht. Kurz gesagt, es ist wahrscheinlich einfacher, mit ihrer Empfehlung zu bleiben und Klassen für das Styling zu verwenden. –

0

Verwenden Sie weiterhin Ihr Layout. GWT ist sehr anpassungsfähig.

Eine Option, die Sie vielleicht ausprobieren möchten, besteht darin, Ihr bestehendes statisches HTML/CSS-Layout beizubehalten. Sie können RootPanel.get ("id") verwenden, um einen Verweis auf ein Element (nach ID) als ein Panel abzurufen, in dem Sie GWT-Widgets (einschließlich anderer Panels) hinzufügen können.

Sie können Ihr Layout auch in eine UiBinder-Vorlage verschieben. Die Vorteile hier sind CSS Minification und Verschleierung (mehrere UiBinders können eine einzige CSS-Ressource teilen)

+0

Ich habe eine Art Combo zwischen diesem Vorschlag von Sripathi gemacht. das ist auch dem Vorschlag von Chris ähnlich. Danke einen Haufen! – brad

+0

Am Ende entschied ich mich, Sripathis Vorschlag zu verwenden. Es scheint den einfachsten Mechanismus zum Aktualisieren der Widgets in jedem Abschnitt zu bieten. Nochmals vielen Dank für die Tipps – brad

3

Wenn Sie einfach die Seite mit Ihren eigenen Divs erstellen möchten, ist der einfachste Weg, divs in der UiBinder XML-Datei zu verwenden. Es können Sie einstellen, auch das id-Attribut wie gewohnt:

<g:HTML> 
    <div id="header">...</div> 
    ... 
</g:HTML> 

Die Layout-Panels von GWT versehen kann nützlich sein, auch - vielleicht möchten Sie mit ihnen ein bisschen mehr spielen, um, und sehen, ob sie bieten jeden Wert (wie einige Cross-Browser-Probleme zu vermeiden) für Sie oder nicht.

+0

ich habe ein bisschen davon mit Sripathis Vorschlag kombiniert – brad