jstree und die async-Option?
heinetz
- javascript
Hallo Forum,
ich versuche mit dem jquery-tree-plugin 'jstree' eine Baumstruktur abzubilden. Der JSTree kann, wie in diesem Beispiel mit JSON umgehen und ich versuche es auch ;)
Ich habe also ein 'async_json_data.json.php' gebaut, dass die DB-Werte ausliesst und in dem richtigen Format ausgibt. Prima, nun zeigt das Beispiel mir, die Daten aus der Datenbank als Verzeichnisbaum an. Beim Laden der Seite wir das Lade-Icon angezeigt, was meinem Eindruck nach dafür spricht, dass die Daten genierert werden, nachdem der Rest der Seite schon angezeigt wird.
Mein Verzeichnisbaum besteht aus ca. 2000 Knoten und beim Laden der Seite werden mir 3 Ordner unterhalb der Wurzel geschlossen angezeigt. Öffnet man einen davon, wird, wie erwartet, dessen Inhalt angezeigt.
Was ich mir unter der async-Option vorgestellt hatte, ist, dass
erst beim Öffnen eines Ordners dessen Inhalt 'geholt' wird. Das
scheint es aber nicht zu sein.
Ich glaube, ich habe ein grundsätzliches Verständnisproblem mit
'async'. Kann mir das jemand erklären?
danke für Tipps und
beste gruesse,
heinetz
asynchron bedeutet nicht, dass es erst nach und nach geholt, sondern lediglich, dass sämtlicher anderer JS-Code nicht während der Ausführung geblockt wird.
Gruß, LX
danke für die Klärung!
heinetz
Hi,
Ich glaube, ich habe ein grundsätzliches Verständnisproblem mit
'async'. Kann mir das jemand erklären?
Hat LX ja eigentlich schon gemacht.
Asynchron in Bezug auf per JS gemachte Requests bedeutet nur, dass sie nicht „blockieren“, also die restliche Verarbeitung nicht abwarten muss, bis das Ergebnis des Requests vorliegt. Stattdessen wird einfach ein Handler definiert, der sich um die Verarbeitung des Requests kümmert, sobald sein Ergebnis vorliegt.
Was ich mir unter der async-Option vorgestellt hatte, ist, dass
erst beim Öffnen eines Ordners dessen Inhalt 'geholt' wird. Das
scheint es aber nicht zu sein.
Das wirst du wohl selbst implementieren müssen, wenn das gewählte Script es nicht vorsieht.
Dazu musst du sowohl das serverseitige Script anpassen, so dass es nicht gleich alle Ebenen ausliest; als auch das clientseitige Script, so dass es beim „Öffnen“ eines Ordners (also vermutlich auf Klick hin) einen neuen Request macht, der vom Server die Daten für diese Ebene anfordert (sofern sie nicht bereits bei einem vorherigen Aufklappen angefordert wurden). Also müssen auch entsprechend Parameter übergeben werden, damit das serverseitige Script weiss, welche Daten es zu liefern hat.
MfG ChrisB
Hi,
in meinem speziellen, das Skript betreffenden Problem, hat ich
die Lösung auch schon gefunden:
Ich hatte, wie Du vermutet hast, die ganze Struktur als JSON
abgelegt und aus dieser wurde dann sofort der ganze Baum
geladen. Das Skript holt tatsächlich bedeingt durch die Otion
'async' die benötigten Daten in dem defnierten JSON-File neu
ab sofern die noch nicht geladen wurden. Da aber alles gleich
geladen wird, wird nichts mehr benötigt. Ich habe tatsächlich
das JSON-File dahingehend anpassen können, dass es die benötigten
Daten liefert und nun verhält sich der Baum, wie erwartet.
dank und
beste gruesse,
heinetz