Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[AS] Wijzig klasse variable vanuit listener

Pagina: 1
Acties:

  • lawnmower
  • Registratie: November 2000
  • Laatst online: 20-10 14:13

lawnmower

Elvis lives..

Topicstarter
Hoi allen,

Momenteel ben ik druk bezig met het uitlezen van XML in Actionscript 3.0. Ik heb een klasse gemaakt die dit zou moeten kunnen, echter loop ik tegen een probleem aan.

In de functie 'loadXML' laadt de xmlLoader het XML bestand, als deze klaar is zou hij de functie 'xmlLoaded' moeten aanroepen. Dit doet hij ook wel, echter.. vanuit deze functie kan ik de klasse variabelen niet aanpassen (bv. sPuzzelName). Ideaal zou zijn dat hij de klasse variabelen vult met data uit de nodes, en dat ik op de plek waar ik de Puzzels-class aanroep de indivuele variabelen kan aanroepen.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class Puzzel
{
        protected var xmlLoader:URLLoader;
        protected var xml:XML;
        protected var sPuzzelName;
        
        public function Puzzel()
        {
        }

        public function loadXml(Filename:String):void
        {
            xmlLoader = new URLLoader();
            xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
            xmlLoader.load(new URLRequest(Filename));
        }

        function xmlLoaded (evt: Event)
        {
            try
            {
                XML.ignoreWhitespace = true;
                xml = new XML(evt.target.data);

                this.sPuzzelName = xml..@PuzzelName; // Dit werkt dus niet
            } 
            catch(e:Error)
            {
                trace('Er zit een fout in de XML: ' + e.message)
                return;
            }
        }

    }
}


Is dit de juiste approach? Mis ik iets?

Alvast bedankt!

Verwijderd

Ik ken AS niet zo goed (JS wel) maar moet dat niet OF this.sPuzzelName (let op de spelfout) zijn OF gewoon sPuzzelName (zoals in JavaScript).

  • lawnmower
  • Registratie: November 2000
  • Laatst online: 20-10 14:13

lawnmower

Elvis lives..

Topicstarter
Verwijderd schreef op maandag 21 januari 2008 @ 12:24:
Ik ken AS niet zo goed (JS wel) maar moet dat niet OF this.sPuzzelName (let op de spelfout) zijn OF gewoon sPuzzelName (zoals in JavaScript).
Je hebt gelijk.. het kan allebei. Ik had een typefout gemaakt (sPuzzelName / PuzzelName) omdat ik eerder met get / set functies werkte.

  • lawnmower
  • Registratie: November 2000
  • Laatst online: 20-10 14:13

lawnmower

Elvis lives..

Topicstarter
Het is al 'opgelost', in zoverre dat ik nu weet waarom ik dacht dat de local variabele niet veranderd werd. Ik zette de volgende aanroepen onder elkaar:

code:
1
2
3
var myPuzzel:Puzzel = new Puzzel();
myPuzzel.loadXml("puzzeldata.xml");
trace(myPuzzel.sPuzzelName);


Echter, het duurt natuurlijk iets langer om de XML in te laden dan het opvragen van de klasse variabele, waardoor het lijkt alsof er niks gebeurd is. Het volgende toonde aan dat de local variabele wel degelijk veranderd werd, alleen wat later dan ik dacht:

code:
1
2
3
4
5
6
7
8
9
10
var myPuzzel:Puzzel = new Puzzel();
myPuzzel.loadXml("puzzeldata.xml");

var myTimer:Timer = new Timer(1000, 1); // 1 second
myTimer.addEventListener(TimerEvent.TIMER, runOnce);
myTimer.start();

function runOnce(event:TimerEvent):void {
    trace(myPuzzel.PuzzelName);
}