Aus GWT Dokumentation und Quellcode scheint es, dass diese Klasse nur über UIBinder Funktionalität und keiner der Basis GWT Widgets diese Klasse verwenden. Die Hauptfunktion und einzige Funktion von LazyDomElement
ist der verzögerte Zugriff auf die Felder Ihres Widgets. Angenommen, Sie haben ein Widget mit Vorlage haben:
<gwt:HTMLPanel>
<div ui:field="lazyField" />
<div ui:field="generalField" />
<!-- Other fields -->
</gwt:HTMLPanel>
und Java-Klasse für sie:
public class MyCoolWidget extends UIObject {
interface MyUiBinder extends UiBinder<DivElement, MyCoolWidget> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
@UiField LazyDomElement<DivElement> lazyField;
@UiField DivElement generalField;
// all other fields …
public MyCoolWidget() {
// Initializes all your fields and also calls 'getElementById' for all
// not lazy fields of your widgets to have a reference to them.
// There could be hundreds of them if you are building really cool app,
// and also they could be hidden (e.g. other tab on UI) and not required
// to be accessed at all for some cases.
setElement(uiBinder.createAndBindUi(this));
}
public void setLazyField(String value) {
// Finally we need to modify the field, ok,
// we access the DOM only at this moment
// (please take a look at 'get()' method implementation for details)
lazyField.get().setInnerText(name);
}
public void setGeneralField(String value) {
// Reference to element is already there, we are just going
// to change it's property
generalField.setInnerText(name);
}
}
Also, der Grund ist es der Verwendung hängt nur von Fall Ihrer Anwendung, benötigen Sie Lazy Loading Ihrer Widget-Elemente oder nicht.
UPD. Es ist erwähnenswert, dass ich diese Klasse noch nicht in realen Projekten verwendet habe :). Ich kann mir ein Szenario vorstellen. Zum Beispiel müssen Sie ein Reservierungsfenster für Tickets erstellen. Mit folgenden Anfangsbedingungen:
- Sollte Ticketreservierung für bis zu N-Reisende
- Eingabeformulare für jeden Reisenden sind gleich und ziemlich schwer (Rich-HTML, viele Eingabefelder) unterstützen
Daher müssen Sie bis zu 10 gleichwertige Rich-Forms gleichzeitig rendern, ohne dass Sie auf ihre Felder zugreifen müssen, bevor die Seite geladen wird. Wir könnten ReservationForm
Widget (ReservationForm.ui.xml
mit Markup, und ReservationForm.java
für einige Logik) bauen und LazyDomElement
für Eingabefelder verwenden, um unsere erste Ladezeit zu speichern.
Wow - große Antwort, danke @mudalov (+1)! Eine schnelle Folge für das Kopfgeld: Könntest du bitte deine Antwort aktualisieren, um ein paar Anwendungsszenarien aufzunehmen, in denen jemand ein langsames Laden von Widget-Elementen benötigt? Ich bin ganz neu bei GWT und habe eine schwere Zeit, "den Wald durch die Bäume zu sehen". Danke noch einmal! – IAmYourFaja
@ 4herpsand7derpsago, ich habe einen einfachen Fall hinzugefügt. – udalmik