Avatar billede Slettet bruger
21. juni 2006 - 15:21 Der er 5 kommentarer og
1 løsning

Hvordan refererer jeg til en "_parent"

Hej eksperter.

Nedenstående metode tracer hhv. et "0" og "undefined".
Ved nogen, hvordan jeg refererer til variablen "episode", når jeg er inde i onLoad-scopet?

Mvh. Anders



class Player {

private var episode = 0;
private var xmlfilename = "content.xml";
private var xmlfile;

public function indlaesXML() {
  trace(this.episode);  // <----- Denne viser et 0-tal
  this.xmlfile = new XML();
  this.xmlfile.ignoreWhite = true;
  this.xmlfile.load(this.xmlfilename);
  this.xmlfile.onLoad = function() {
    trace("Episodeinfo: " + this.episode);  <----- Denne viser "undefined" - hvorfor?
  } // onLoad slut
} // funktion slut

} // classdef slut
Avatar billede _k Nybegynder
21. juni 2006 - 18:31 #1
Fordi xmlfile ikke har nogen property der hedder "episode". Og det er den du henviser til når du bruger "this".

Du kan bare smide variablen på dit xml-objekt:

....
this.xmlfile.episode = episode;
this.xmlfile.onLoad = function() {
    trace("Episodeinfo: " + this.episode);
....

(og så behøver ud forresten heller ikke alle dine "this"'er i funktionen. Ligger en variabel eller et objekt i en klasse, kan den godt selv finde ud af hvor den er, det behøver du ikke at fortælle den - selvom det ikke er direkte forkert at gøre (men det giver kortere og mere overskuelig kode at lade være, og det er jo det de unge vil ha' ;) )
Avatar billede Slettet bruger
22. juni 2006 - 09:56 #2
Jamen det spiller jo bare. Tak :)
Hvis du lige smider et svar, får du dine point.
Avatar billede _k Nybegynder
22. juni 2006 - 10:33 #3
Selv tak.
Avatar billede Slettet bruger
22. juni 2006 - 12:04 #4
Jo, må jeg lige - i relation til ovenstående - spørge om en sidste ting:

Når XML-filen er indlæst, ønsker jeg metoden "opretScener" kaldt jf. nedenstående - men den tracer aldrig... og metoden er, som jeg ser det, "out of scope", ikke?

...
...
this.xmlfile.antalepisoder = antalepisoder;
xmlfile.onLoad = function() {
  var antalepisoder = 0;
  while (this.firstChild.childNodes[antalepisoder]) {
    antalepisoder++;
  }
  opretScener();
}

public function opretScener() {
  trace("OpretScener køres");
}
Avatar billede _k Nybegynder
22. juni 2006 - 14:33 #5
Lige præcis - og en yderst irriterende ting i AS2! Hvilket scope man er i hvornår er kilde mange skaldede pander rundt omkring....

Du kan komme udenom det på samme måde som før:

.
this.xmlfile.antalepisoder = antalepisoder;
this.cmlfile.scope = this;
xmlfile.onLoad = function() {
  var antalepisoder = 0;
  while (this.firstChild.childNodes[antalepisoder]) {
    antalepisoder++;
  }
  this.scope.opretScener();
}

.. men du kan også begynde at køre metoder igennem en proxy-klasse som udligner scopes for dig. Du kan bruge den her: http://www.person13.com/articles/proxy/Proxy.htm

..eller du kan bruge Macro... øhh, Adobes egen "Delegate"-klasse - søg på den i hjælpen for eksempler.
Avatar billede Slettet bruger
22. juni 2006 - 18:36 #6
Ah, javel ja. Jamen endnu engang tak :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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