GWT - Hinzufügen und Entfernen von Knoten in Celltree

8

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%     
user1165474 28.01.2012, 10:50
quelle

3 Antworten

5

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:

  1. Behalte einen Verweis für jedes 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).
  2. Schließen Sie alle Knoten programmatisch und öffnen Sie sie erneut.

Beide sind irgendwie eine PITA zu implementieren. Leider gibt es keinen einfachen Weg.

    
Ümit 28.01.2012 16:59
quelle
0

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.

    
James Annesley 19.03.2012 17:07
quelle
0

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.

Ссылка

    
gslender 20.10.2013 08:07
quelle

Tags und Links