Franka: Daten in DOM oder separat

Guten Tag.

Einen Satz Daten, meist dreistellig an der Zahl, möchte ich per HTML und Javascript auf den Bildschirm bringen. Die Daten werden in diversen, verschachtelten Gruppen dargestellt. So lange die Seite steht, kommen durchs Bearbeiten neue dazu (Daten wie auch Gruppen) und alte fliegen natürlich auch mal raus.

Jetzt kann ich mich nicht entscheiden, wie ich die zu einem Datum gehörige Gruppe in der Seite auffinden sollte. Ich könnte:

a) javascriptseitig eine Baumstruktur anlegen, die die jeweiligen Gruppenmerkmale mit dem dazugehörigen DOM-Objekt verknüpft. Die Gruppe findet sich, vereinfacht gesagt, über dom[gruppea][gruppeb][gruppec].

b) das jeweilige Gruppenmerkmal im id-Attribut des DOM-Objektes ablegen. Die Gruppe findet sich dann über getElementById("bla_" + [gruppea] + "-" + [gruppeb] + "-" + [gruppec]).

Bei a) hätte ich praktisch die komplette Seite in einer Variablen gespiegelt. Diese doppelte Datenhaltung ist mir unsympathisch, andererseits scheint sie mir auch unabhängiger von der Seite zu sein als b).

Technisch sind beide Varianten kein Problem; es ist also nicht so, dass sich aus [gruppea] + "-" + [gruppeb] + "-" + [gruppec] keine ID bilden ließe (b) oder die Merkmale nicht für dom[gruppea] verwendbar wären (a).

Irgendwelche Gedanken für oder gegen a) bzw. b)?

  1. Tach!

    Jetzt kann ich mich nicht entscheiden, wie ich die zu einem Datum gehörige Gruppe in der Seite auffinden sollte. Ich könnte:

    Die Frage ist, werden die Daten später weiterverwendet?

    a) javascriptseitig eine Baumstruktur anlegen, die die jeweiligen Gruppenmerkmale mit dem dazugehörigen DOM-Objekt verknüpft. Die Gruppe findet sich, vereinfacht gesagt, über dom[gruppea][gruppeb][gruppec].

    Wenn ja, dann ist es vermutlich nicht unsinnig, sie in Rohform vorliegen zu haben, anstatt sie irgendwie aus dem DOM herauszufischen und nur Strings zu bekommen (oder zu parsendes JSON).

    b) das jeweilige Gruppenmerkmal im id-Attribut des DOM-Objektes ablegen. Die Gruppe findet sich dann über getElementById("bla_" + [gruppea] + "-" + [gruppeb] + "-" + [gruppec]).

    Wenn nein, dann stört es vermutlich nicht, beim Hinzufügen und Entfernen die Teile direkt im DOM zu suchen.

    dedlfix.

    1. Hallo und danke erstmal.

      Jetzt kann ich mich nicht entscheiden, wie ich die zu einem Datum gehörige Gruppe in der Seite auffinden sollte. Ich könnte:

      Die Frage ist, werden die Daten später weiterverwendet?

      Ja, die Seite ist zum Bearbeiten der Daten gedacht, sie werden dann natürlich auch irgendwann gespeichert.

      Die Frage bezog sich allerdings nicht auf die Daten selbst, sondern darauf, wie das HTML- bzw. DOM-Element gefunden werden soll, unter der ein Datum eingeordnet wird.

      Bei den Daten könnte es sich um Früchte in einem Obstkorb handeln. Zwei Obergruppen in der Anzeige wären dann "Äpfel" und "Birnen". Es wäre dann bei jedem Datensatz zu entscheiden, ob er in die <ul>-Liste Äpfel oder in die Liste Birnen als <li> eingeordnet wird. Oder ob gar eine neue Liste erzeugt werden muss, weil's eine Zitrone ist.

      Das passende <ul>-Element könnte entweder in einer Javascript-Liste à la {aepfel: <dom-objekt>, birnen: <dom-objekt>} zu finden sein. Oder aber ich suche es über getElementById("aepfel") bzw. getElementById("birnen").

      Wegen der Verschachtelung würde es auf getElementById("birnen-klein-gelb-saftig") hinauslaufen, entsprechend enthielte die Javascript-Liste ihrerseits Listen; ich habe ein halbes Dutzend Ebenen.

      1. Tach!

        Jetzt kann ich mich nicht entscheiden, wie ich die zu einem Datum gehörige Gruppe in der Seite auffinden sollte. Ich könnte:

        Die Frage ist, werden die Daten später weiterverwendet?

        Ja, die Seite ist zum Bearbeiten der Daten gedacht, sie werden dann natürlich auch irgendwann gespeichert.

        Ich meinte eine Verarbeitung mit Javascript. Wenn das nur Eingabefelder sind, die irgendwann mit einem Form-Submit und ohne weiteres Javascript-Zutun zum Server gesendet werden, findet in dem Sinne keine Verarbeitung statt und man braucht sie nicht in einer eigenen Struktur vorzuhalten.

        dedlfix.

  2. hi,

    Irgendwelche Gedanken für oder gegen a) bzw. b)?

    Die Änderungen finden im DOM statt (Benutzer). Entweder hast Du eine Funktion, die bei jeder Änderung ein Datenobjekt aktualisiert (Daten redundant, Zugriff auf Daten über ein Objekt) oder Du hast eine Funktion, die bei einem gewünschten Datenzugriff direkt alles aus dem DOM ermittelt (Daten nicht redundant, Zugriff auf Daten über eine Funktion).

    Letztendlich brauchst Du jedoch für beide Fälle ein Objekt, nämlich dann, wenn es ans Speichern oder Übertragen geht (aus dem Objekt wird eine Datei erzeugt).

    Deine Funktion könnte so aussehen, dass sie ohne Argumente das komplette Datenobjekt liefert (zur Laufzeit aus dem DOM ermittelt) und mit Argumenten (group, key) den entsprechenden Einzelwert.

    Dag