2011-01-06 10 views
1

so habe ich an einem Projekt in Javascript gearbeitet, die Objekte in den Benutzer einnimmt und stellt sie in HTML darstellt. Im Moment werden sie im Speicher als ein Array und in der Anzeige als ein separates Array dargestellt. Nach der Integration einiger Code-Änderungen sind Probleme aufgetreten, da das Display-Array Schwierigkeiten hat, seinen Inhalt zu entfernen, wodurch Dinge, die entfernt werden sollten, nicht aus der Ansicht verschwinden.Javascript und HTML-Datenmodell und Präsentationsmodell Design-Frage

Deklarieren Listen:

this.divList = gDocument.getElementById(element); 
this.objectList = []; 

ein Objekt in den Listen hinzufügen:

addObject = function (address, type){ 
    var newDiv = gDocument.createElement("div"); 
    this.divList.appendChild(newDiv); 

    var d = this.createObject(newDiv, address, type); 

    if (undefined != d) 
    { 
     this.objectList.push(d); 
    } 
} 

Die divList genau Object reflektiert, bis alle Änderungen an der objektliste zur Laufzeit vorgenommen werden. Beim Neustart sind die Listen wieder synchronisiert. Als ich versuchte, es zu reparieren, waren die Dinge sehr kompliziert. Ich frage mich, ob es eine bessere Möglichkeit gibt, eine solche Idee zu entwerfen (das Objektmodell und die grafische Darstellung). Irgendwelche Kommentare wären hilfreich, danke.

+1

Dies ist ein bisschen vage ... Sie müssen spezifische Beispiele für "wie eine divList aussieht", "wie eine Objektliste aussieht" und "wie rendern Sie Ihre divList" für die besten Ergebnisse liefern. –

+0

Theoretisch können eine divList und eine objectList jedoch mit einem anderen Design verschwinden. Ich suche eher Designvorschläge für die Idee eines Javascript-Objektmodells und eine grafische Darstellung in HTML. Alles, was ich intakt benutze, fühlt sich an, als würde es den Zweck eines neuen Designs besiegen, da ich das Gefühl habe, es würde nichts einfacher machen. – user535617

Antwort

0

Frage Vagheit beiseite, meine Empfehlung wäre, eine Liste, nicht zwei, im Speicher zu speichern. Jedes Listenelement ist ein Objekt mit allen notwendigen Daten, die Sie für dieses abstrakte Objekt "" benötigen (diejenigen, die "der Benutzer bereitstellt") . Etwas wie folgt aus:

this.divList = gDocument.getElementById(element); 
this.masterList = []; 
var i, 
    len = this.divList.length; 
for (i = 0; i<len; i++) 
{ 
    this.masterList.push({ 
     elt: this.divList[i], 
     obj: /* however you'd create the object in this.objectList */ 
    }); 
} 

bearbeiten: Ihre addObject Funktion wäre so etwas wie dies geändert werden:

addObject = function (address, type) 
{ 
    var newDiv = gDocument.createElement("div"), 
     newObj = {elt: newDiv, 
        obj: this.createObject(newDiv, address, type)}; 
    this.masterList.push(newObj); 
    this.divList.appendChild(newDiv); 
} 

Sie einen Verweis auf das HTML-Element gespeichert werden sollte, die Sie appendChild() sind zu. Sie tun dies bereits - aber wenn man die einzelnen Elemente manipulieren müssen (sagen wir, entfernen Sie eine), verwenden Sie die masterList statt:

removeObject = function (i) 
{ 
    var toRemove = this.masterList.splice(i, 1); 
    if (toRemove) 
    { 
     this.divList.removeChild(toRemove.elt); 
    } 
} 

Siehe auch Array.splice().

+0

Also nehme ich an, dass elt Element darstellen soll? Wenn ich also richtig verstehe, schiebe ich ein Objekt sowohl mit einem Element (HTML-Darstellung) als auch mit dem Objekt. Wenn ich aber nur eine Liste speichern soll, warum ist divList dann noch da? – user535617

+0

@user: Ja, das ist was ich meine. 'divList' ist da, weil ich annahm, dass Sie die Elemente aus dem HTML lesen mussten (ich habe Ihre Frage vorher nicht bearbeitet). In Anbetracht Ihrer Bearbeitung ist 'divList' nicht notwendig. –

+0

@user: siehe meine Bearbeitung. –