2016-09-22 1 views
0

Ich habe gerade begonnen, mit gwt zu arbeiten, und ich versuche, folgende Aufgabe zu lösen: Ich habe zwei Klassen Monat und Jahr, dass Composite zu erweitern. Und in meiner Implementierungsklasse Ich habeErzwingen Widget neu zu zeichnen

UiField(provided = true) 
Composite composite; 

Month month; 

Year year; 
... 
//Constructor 
@Inject 
MyClassImpl(){ 
    month = new Month(); 
    year = new Year(); 
    composite = month; 
} 

updateComposite(){ 
    composite = year; 
    logger.fine("composite = " + composite); 
} 

Mein Problem ist, wenn ich updateComposite() aufrufen Methode, die ich auf der Konsole zu sehen, dass es aktualisiert wird, aber es ist neu zeichnet nicht auf dem Bildschirm. Es sieht so aus als wäre die Antwort auf meine Frage sehr einfach, aber ich habe es nicht gefunden. Ich schaute hier How can I force GWT widget to update? und einige andere Orte.

Antwort

2

Sie ändern den Wert, wenn ein Feld in Ihrer Klasse (das in eine Eigenschaft konvertiert, wenn ein JS-Objekt), Sie die Komponenten nicht in das DOM tauschen.

Sie müssen den neuen Wert an die Stelle des alten im DOM setzen. Die Art und Weise, wie Sie das tun, hängt jedoch sehr von Ihrer ui.xml ab. Eine Möglichkeit wäre, stattdessen ein SimplePanel in der Datei ui.xml zu verwenden und mit setWidget das entsprechende Widget festzulegen, das angezeigt werden soll.

+0

Danke, ich habe den Quellcode von setWidget durchgesehen und gesehen, dass das Hinzufügen des Widgets zum DOM-Baum das war, was ich vergessen habe. – Evgen

Verwandte Themen