Hier habe ich ein komplettes und sehr einfaches Beispiel zum dynamischen Hinzufügen / Entfernen Knoten zu einem Zellbaum. Mein Beispiel funktioniert nicht sehr gut. Es scheint dort zu sein ist ein Aktualisierungsproblem. Nur das Schließen / Erweitern der Knoten zeigt das Richtige an Ergebnis. Ich habe auch keine Antwort in diesem Forum gefunden, das zu diesem Problem passt. Vielleicht kann jemand mein Beispiel ausprobieren und mir sagen, wo das Problem liegt. Jeder andere Hinweis wird auch sehr geschätzt.
Grüße, Marco
%Vor%Danke Ümit für deine Erklärung. Ich habe die Close-Reopen-Version ausprobiert. Ich habe meine Aktualisierungsmethode durch die folgenden Methoden ersetzt. Hinzufügen funktioniert, aber Entfernen nicht. Sehr komisch das ganze Thema. Ich bin sehr überrascht, dass diese grundlegenden Funktionen werden von GWT nicht wirklich unterstützt. Kann mir jemand mehr Hilfe geben, um ein richtiges Arbeitsbeispiel zu führen?
%Vor%Hier mein dritter Versuch: Dieser Weg wird von gwt-commiter empfohlen. Bitte beachten Sie folgende Ausgabe: Ссылка
Aktueller Status: * Hinzufügen ist möglich * Entfernen ist möglich, wenn nicht letztes Kind!
Also, letzten offenen Punkt, aktualisieren Sie die Struktur, wenn das letzte offene Kind!
%Vor% Dies ist ein bekanntes Problem mit CellTree.
Der Grund für das Aktualisierungsproblem ist, dass Sie in der Funktion getNodeInfo()
eine neue Instanz ListDataProvider
für jede CellTree-Ebene erstellen.
Der CellTree aktualisiert / aktualisiert sich nur dann selbst, wenn Sie die Elemente in diesem ListDataProvider
aktualisieren.
Ich glaube, dass Ihre Funktionen removeMenu () und addSubMenu () Elemente aus der ursprünglichen Liste in Ihrer MyNode-Klasse hinzufügen und entfernen, aber die Liste in den entsprechenden ListDataProvidern nicht aktualisieren (Sie können versuchen, dies im Debug-Modus zu überprüfen) >
Der Grund, warum der CellTree aktualisiert wird, wenn Sie schließen und erneut
- Öffnen Sie die Knoten, denn wenn Sie die Knoten erneut öffnen, wird der getNodeInfo()
erneut aufgerufen, und die gesamte CellTree-Struktur wird erneut erstellt (einschließlich des neuen Menüs bzw. ohne den entfernten).
Es gibt zwei mögliche Lösungen:
ListDataProviders
irgendwo und rufe remove / add auf dieser Liste auf (obwohl du das tust, nehme ich an, dass die Elemente dort nicht wirklich hinzugefügt / entfernt werden). Beide sind irgendwie eine PITA zu implementieren. Leider gibt es keinen einfachen Weg.
Ich lösche nur das Array von Objekten, die in meinem Datenprovider verwaltet werden. Ich mache das in onRangeChanged(final HasData<?> display)
. Ich schätze, ich benutze hier kein ListDataProvider
, sondern etwas, das stattdessen AbstractDataProvider<T>
erweitert.
Um den Knoten hinzuzufügen, fügen Sie ihn zu Ihrer Liste innerhalb der Methode onRangeChanged()
hinzu und rufen Sie dann updateRowData()
auf. Sie können dies auch für ein Löschen tun.
Ich glaube, ich habe das Problem geleckt ...
Im Wesentlichen habe ich viele Teile von CellTree erweitert und unterklassifiziert und ein fast perfektes Arbeitsbeispiel erhalten. Zu komplex, um hier zu dokumentieren, aber es reicht aus zu sagen, dass die Lösung eine Knoten-Klasse verwendet, in der ich den Datenprovider in jedem Knoten gespeichert habe.