Karrackoo: Instanzen verwalten

Hallo Zusammen

Nehmt's mir nicht übel falls ich irgendwas falsch mache, dies ist mein erster Post hier ;).
Also meine Frage wäre folgende:
Wie kann ich eine beliebige Anzahl Instanzen eines bestimmten Objekts verwalten? Ich hab das ganze Web abgegrast aber nirgends was gescheites gefunden. Vielleicht hab ich auch nach den falschen Begriffen gesucht...
Also wenn jemand etwas dazu weiss, wäre ich sehr froh!

Grüsse
Karrackoo

  1. Tag Karrackoo.

    Wie kann ich eine beliebige Anzahl Instanzen eines bestimmten Objekts verwalten?

    Was verstehst du unter Instanzen verwalten bzw. was ist dein Ziel?

    Siechfred

    1. Ich will per Formular eine beliebige Anzahl DIV Layer erstellen. Diese haben als Inhalt einen Titel und eine Nachricht (Notizzettel). Jeder dieser Zettel sollte man aber auch wieder löschen können, drum muss ich wenn ich ein neues Objekt "Notizzettel" erstelle irgednwie wissen welche Instanz das ist. Ich kann ja nicht einfach jeder
      note1 = new Note(Titel, Inhalt);
      benennen, sonst wird note1 immer wieder überschrieben...

      Tag Karrackoo.

      Wie kann ich eine beliebige Anzahl Instanzen eines bestimmten Objekts verwalten?

      Was verstehst du unter Instanzen verwalten bzw. was ist dein Ziel?

      Siechfred

      1. Tag Karrackoo.

        Ich will per Formular eine beliebige Anzahl DIV Layer erstellen. Diese haben als Inhalt einen Titel und eine Nachricht (Notizzettel). Jeder dieser Zettel sollte man aber auch wieder löschen können, drum muss ich wenn ich ein neues Objekt "Notizzettel" erstelle irgednwie wissen welche Instanz das ist.

        Das geht in Javascript nur, indem du mehrere Objektinstanzen erzeugst:

        note1 = new Note(Titel, Inhalt);
        note2 = new Note(Zitel, Inhalt);
        usw.

        Ich kann ja nicht einfach jeder
        note1 = new Note(Titel, Inhalt);
        benennen, sonst wird note1 immer wieder überschrieben...

        Die entscheidende Frage ist, ob du tatsächlich mehrere Objektinstanzen brauchst. Mal ein Beispiel:

        function Note(divID,Titel,Inhalt) {  
          this.identifier = divID;  
          this.title = Titel;  
          this.content = Inhalt;  
          this.draw = function() {  
            var parElem = document.body;  
            var neuElem = document.createElement('DIV');  
            var neuHead = document.createElement('H1');  
            var Head = document.createTextNode(this.title);  
            neuHead.appendChild(Head);  
            var neuText = document.createElement('P');  
            var Text = document.createTextNode(this.content);  
            neuText.appendChild(Text);  
            var delLink = document.createElement('A');  
            delLink.href = "javascript:deleteNote('" + this.identifier + "');";  
            deleteNote(this.identifier); }  
            Link = document.createTextNode("Notiz loeschen");  
            delLink.appendChild(Link);  
            neuElem.id = this.identifier;  
            neuElem.appendChild(neuHead);  
            neuElem.appendChild(neuText);  
            neuElem.appendChild(delLink);  
            parElem.appendChild(neuElem);  
                                 }  
        }  
          
        function neueNotiz(ID,Beschriftung,Notiz) {  
          if(typeof note == 'undefined') {  
            note = new Note(ID,Beschriftung,Notiz);  
          }  
          else {  
            note.identifier = ID;  
            note.title = Beschriftung;  
            note.content = Notiz;  
          }  
          note.draw();  
        }  
          
        function deleteNote(note_id) {  
          var DIV_to_delete = document.getElementById(note_id);  
          document.body.removeChild(DIV_to_delete);  
        }
        

        Das Ganze zum Testen: http://test.anaboe.net/div_test.html. Soll es nicht so sein, dann wirst du in der Tat so viele Objektinstanzen erzeugen müssen, wie du brauchst. Diese könntest du auch in einem eigenen Objekt sammeln:

        var collection = new Object();  
        collection['Notiz1'] = new Note(...);  
        collection['Notiz2'] = new Note(...);
        

        Der Zugriff wäre dann:

        collection['Notiz1'].Eigenschaft

        Ein Objekt entfernst du dann einfach mittels delete():

        delete collection['Notiz1']

        Das Ganze ebenfalls zum Testen: http://test.anaboe.net/div_test2.html.

        Siechfred

        1. Hi Siechfred

          Geniale Hilfestellung, danke!
          So hab ich mir das etwa gedacht und bin auch mehr oder weniger schon soweit gekommen. Das Problem wie du siehst, sind nun eben diese IDs. Auch du definierst diese fest mit notiz1, notiz2 usw. Deshalb werden, wenn man mehrere DIVs mit der ID notiz1 erstellt, auch immer zuerst die Erste gelöscht, auch wenn man die Zweite anklickt.
          ich müsste diese IDs fortlaufen generieren können.
          Da komm ich wohl nicht um einen Zähler herum der bei jeder neuer Notiz eins höher wird oder was meinst du?
          Grundsätzlich frage ich mich auch gerade, warum überhaupt ein Objekt und nicht einfach eine Funktion, wenn man sowiso nicht verschiedene Instanzen braucht?

          Grüsse
          Karrackoo

          1. So hab ich mir das etwa gedacht und bin auch mehr oder weniger schon soweit gekommen. Das Problem wie du siehst, sind nun eben diese IDs. Auch du definierst diese fest mit notiz1, notiz2 usw. Deshalb werden, wenn man mehrere DIVs mit der ID notiz1 erstellt, auch immer zuerst die Erste gelöscht, auch wenn man die Zweite anklickt.

            Eine ID ist wie der Name schon andeutet imer eindeutig, d.h. es darf keine gleichen IDs geben.

            ich müsste diese IDs fortlaufen generieren können.
            Da komm ich wohl nicht um einen Zähler herum der bei jeder neuer Notiz eins höher wird oder was meinst du?

            Dann solltest du ein Array benutzen.

            Grundsätzlich frage ich mich auch gerade, warum überhaupt ein Objekt und nicht einfach eine Funktion, wenn man sowiso nicht verschiedene Instanzen braucht?

            Wie du die umsetzt bleibt dir überlassen, du kannst auch einfach eine neues Objekt erzeugen mit einer eindeutigen ID und diese dann mit getElementById wieder ermitteln, das ist aber nicht so effektiv, da du ja die Referenz auf das Objekt im Prinzip beim erzeugen schon vorliegen hast.

            Das Beispiel von Sichefred liesse sich etwas flexibler gestalten, wenn man beim erzeugen einfach eine Zufalls ID generiert

            Struppi.

            1. Jo ich hab jetzt das mit der Collection plus incrementelle ID eingebaut.
              Funktioniert vorerst. Vielen Dank für die Hilfe!

              Grüsse
              Karrackoo