2016-05-19 4 views
1

In http://www.gwtproject.org/doc/latest/DevGuideUiBinder.htmlHTMLPanel kann in uiBinder verwendet werden, obwohl es keinen Konstruktor ohne Argumente hat. Woher?

heißt es, dass ein Widget in einer uiBinder Vorlage zu verwenden:

sie standardmäßig instantiable sein muss; das heißt, sie müssen einen Konstruktor mit null Argumenten bereitstellen. Es gibt jedoch einige Möglichkeiten, das zu umgehen. Zusätzlich zu den unter Gemeinsame Ressourceninstanzen beschriebenen Mechanismen @UiFactory und @UiField(provided = true) können Sie Ihre eigenen Widgets mit der @UiConstructor Annotation markieren.

HTMLPanel erfüllt keine dieser Anforderungen und kann dennoch in einer UiBinder Vorlage verwendet werden. Woher?

Antwort

1

Einige integrierte Widgets in GWT haben benutzerdefinierte Unterstützung in UiBinder, damit sie ihre Arbeit erledigen können. Für diese Fälle werden Attribute oder Elemente speziell gehandhabt (denken Sie an <ui:with>, <ui:field>, und natürlich <g:HTMLPanel>, usw.), so dass uibinder sinnvoll zu verwenden ist.

HTMLPanel ist ein Sonderfall, in dem es nicht einfach existieren kann, indem HasHtml und HasWidgets implementiert werden, da diese untergeordneten Widgets an einem bestimmten Punkt innerhalb der HTML-Struktur angehängt werden müssen. Also, anstatt mit der öffentlichen API zu arbeiten (wie Sie in den Dokumenten gefunden haben), haben sie ... ein wenig betrogen.

Das Endergebnis ist etwas, das Sie nicht in Ihrem eigenen Code replizieren können, ohne den Uibinder zu fälschen und direkt zu bearbeiten. Dies wurde in anderen Projekten durchgeführt, birgt jedoch das hohe Risiko des Brechens, wenn spätere Änderungen an UiBinder stattfinden, also generell vermieden werden sollte.

TL; DR: Behandeln Sie HTMLPanel wie einen speziellen Fall, der die Regeln leicht beugen kann, um nützlicher zu sein. Versuchen Sie, in Ihrem eigenen Code die UiFactory/UiConstructor/UiChild Annotationen, die Setter für Attribute und die Implementierung einer der unterstützten Schnittstellen für untergeordneten Inhalt beizubehalten.

Verwandte Themen