Avatar billede luzk Nybegynder
11. august 2005 - 22:23 Der er 11 kommentarer og
1 løsning

Gemme objekt i liste

Ohøj,

Jeg sidder i øjeblikket og bakser med at gemme et objekt i en liste.

Jeg opretter et object, og tilføjer det til en liste:
===
var tmpLength = dreamArr.length;
dreamArr[tmpLength]      = new Object();
dreamArr[tmpLength].name = document.dreamsFrm.name.value;
dreamArr[tmpLength].desc = document.dreamsFrm.desc.value;

var optionName = new Option(dreamArr[tmpLength].name, dreamArr[tmpLength], false, false);
dreamList.options[dreamList.length] = optionName;
===

Det fungerer i og for sig udemærket. Problemet opstår når jeg vil hente mit objekt frem igen:
===
for (var i=0, l=dreamList.options.length;i<l;i++)
  {
    if (dreamList.options[i].selected)
    {
      var updateObj = dreamList.options[i].value;
      document.dreamsFrm.name.value = updateObj.name;
      document.dreamsFrm.desc.value = updateObj.desc;
    }
  }
===
Mine felter bliver blot udfyldt med undefined istedet for det, jeg regnede med skulle være i objektet.
Hvis jeg udskriver updateObj, får jeg som forventet afvide at der er tale om et objekt: [object Object]

Objektet virker fint før jeg henter det frem. Tilgår jeg det før jeg gemmer det, kan jeg hente name og desc fint frem.

Mit spørgsmål er derfor om det overhovedet kan lade sig gøre at gemme et objekt i en liste, og hvis ja, hvad gør jeg galt?

/Luzk
Avatar billede nielle Nybegynder
11. august 2005 - 22:30 #1
Jeg synes ikke at du kalder dit array for det samme i det to kodefrakmenter: dreamArr det ene sted og dreamList det andet.
Avatar billede luzk Nybegynder
11. august 2005 - 22:33 #2
dreamArr er det array der benyttes til at skabe mit objekt med.
dreamList er den liste der indeholder objektet (altså arrayet dreamArr)

/Luzk
Avatar billede olebole Juniormester
11. august 2005 - 22:52 #3
<ole>

Du kan f.eks. sætte et tal som værdi:
var optionName = new Option(dreamArr[tmpLength].name, tmpLength, false, false);

- og så:
  var updateObj = dreamArr[ dreamList.options[i].value ];

/mvh
</bole>
Avatar billede olebole Juniormester
11. august 2005 - 22:55 #4
- men det er - udfra de kodestumper, du leverer - svært at se, hvordan dit variable-scope ser ud. Men variablen 'dreamArr' skal jo nok være erklæret globalt  :)
Avatar billede luzk Nybegynder
11. august 2005 - 23:01 #5
ole: sk*de god idé!
var så forhippet i at objektet skulle gemmes i listen, så jeg ikke lige tænkte over bare at tilgå arrayet... DOH :o)

Well - kodestumper er vel nok til eksperter :D

Smid et svar, og pointene skal fluks komme

/Luzk
Avatar billede roenving Novice
11. august 2005 - 23:02 #6
-- og du mangler også at vise på hvilket tidspunkt .options defineres som et array, så hele konstruktionen kan retfærdiggøres ...

-- men gentlig bør man erklære hele tingen som et rigtigt objekt på javascript-maner:

funktion myObject(name,desc){
  this.name = name;
  this.desc = desc;
}

-- og så oprette objekterne, når de skal kastes i listen:

var liste = new Array();

liste[liste.length] = new myObject(document.dreamsFrm.name.value,document.dreamsFrm.desc.value);

-- osv...
Avatar billede luzk Nybegynder
11. august 2005 - 23:03 #7
roensvig: jojo - ville bare lige lave en quick-n-dirty test om det virkede før jeg lavede en korrekt løsning :-)

men tak for kommentaren

/Luzk
Avatar billede luzk Nybegynder
11. august 2005 - 23:05 #8
bah - kan jeg nu ikke engang skrive et rigtigt navn... beklager roenving, ville ikke være ubehøvlet ved at skrive dit navn forkert, men så ganske enkelt forkert :o)

/Luzk
Avatar billede roenving Novice
11. august 2005 - 23:11 #9
*lol*

-- og heller ikke jeg kan stave til function på javascriptsk !-)
Avatar billede olebole Juniormester
11. august 2005 - 23:23 #10
Man kan vel sige, at der er to tilgange til kodning af JS-applikationer:
1. Den en programmør vil bruge (Læs: uddannet, professionel programmør)
2. Den en autodidakt HTML-klamper vil bruge

Den 'rigtige' programmør opbygger en abstrakt objekt-struktur med metoder, properties og events. Den har for så vidt intet med interface'et at gøre. Interface'et bruger han kun som 'håndtag' og 'tavler', der giver brugeren adgang til at sende beskeder frem og tilbage til den bagvedliggende, abstrakte struktur - hvor hele afviklingen af applikationen foregår.

HTML-klamperen roder hellere end gerne sit interface sammen med selve programkoden. Faktisk tager han udgangspunkt i interface'et og hægter alt muligt op på dette, hvilket giver en helt anden - og langt mere vakkelvorn - kode  :)

I den forbindelse giver array-løsningen den absolut bedste, mest robuste og mest vedligeholdelses venlige kode. Om så du opretter objektet med den ene eller den anden constructor, betyder mindre  :)
Avatar billede luzk Nybegynder
11. august 2005 - 23:35 #11
Hehe, lader til min kode kan give emner til diskution :-)
Som sagt, blot et stykke test inden den endelige udgave laves - og ja, der er model/view seperation inde i billedet :o)

/Luzk
Avatar billede olebole Juniormester
11. august 2005 - 23:49 #12
- njaahhh ... det kræver jo uenighed - og jeg tror faktisk, at 'rundsving' og jeg er temmelig enige på dette punkt  :)
- og når jeg nu ser, du selv bruger ordet 'model', kan jeg jo regne ud at yderligere 'nu skal du bare høre ...' er så inderligt spild (på den fede måde)  ;o)

Tak for points  :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester