Toon posts:

[Flash/Actionscript 2.0] Aanspreken van klassevariabelen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Test
{
    var sTest:String;
    
    function SetTest()
    { 
        function DoIt
        {
            this.sTest = "Dit is een test.";
        }
        
        DoIt();

        trace(this.sTest);
    }
}

var oTest:Test = new Test();
oTest.SetTest();


Bovenstaand voorbeeld werkt niet en ik kon op het internet (Macromedia.com) ook niet terugvinden hoe ik vanuit functies binnen functies klassevariabelen aan kan spreken.

[ Voor 4% gewijzigd door Verwijderd op 31-10-2004 14:36 ]


  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07-2025
Hmmz, wel een aparte constructie zo ? :)

Maar je zou dan de functie binnen de functie een reference moeten meegeven naar het 'parent' object, aangezien alles binnen de eigen scope van de functie wordt uitgevoerd, en het geen directe 'child' functie van het 'parent' object is.

Dan krijg je dus zoiets, maar ik ben niet zo thuis in flash dus misschien kan het nog makkelijker. :)

Actionscript:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Test
{
    var sTest:String;
    
    function SetTest()
    {       

        function DoIt(objRef)
        {
            objRef.sTest = "Dit is een test.";
        }
        
        DoIt(this);

        trace(this.sTest);
    }
}

Verwijderd

Topicstarter
Helaas dat werkt niet, maar bedankt dat je even gekeken hebt.

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07-2025
Apart, hier werkt het wel. Wat ik heb is:
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
in Test.as:

class Test 
{
    var sTest:String; 
        
    function SetTest() 
    {         
        function DoIt(objRef) 
        { 
            objRef.sTest = "Dit is een test."; 
        } 
        DoIt(this); 
    }
        
    function GetTest() 
    {
        return this.sTest; 
    }
}

direct onder root in test.fla:

var oTest:Test = new Test();
oTest.SetTest();
trace( oTest.GetTest() ); // geeft als trace waarde netjes: "Dit is een test."


Maar waarom eigenlijk die funties binnen een functie? :)

Verwijderd

Topicstarter
Ik ben bezig met het bouwen van een XML-parser en daarbij zoek ik naar een mogelijkheid om de variabelen binnen de 'onLoad-functie' naar buiten te transporteren. Dat dit niet goed lukt, ligt eraan dat je geen '()' mag gebruiken achter de aanroep (onLoad = LoadXML), vandaar ook dat jou voorbeeld in eerste instantie niet werkte bij mij. Ik bedacht me net dat ik ook _global zou kunnen gebruiken als ik wel die '()' achter de functie had mogen gebruiken.

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class XMLParser
{
    var sTest:String;
    
    function SetXML(sFileName:String)
    { 
        function LoadXML()
        { 
            _global["sTest"] = "Dit is een test.";
        }
        
        var oXML:XML = new XML();
        oXML.ignoreWhite = true;
        oXML.onLoad = LoadXML;
        oXML.load(sFileName);
        
        this.sTest = _global["sTest"];
        trace(this.sTest);
    }
}

  • pjotrk
  • Registratie: Mei 2004
  • Laatst online: 15-07-2025
Dan gaat wat ik als eerste zei idd niet.
Wat nog wel kan is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class XMLParser
{
    var sTest:String;
        
    function SetXML(sFileName:String)
    { 
        var refThis = this;
        this.sTest = "Eerst is het dit";

        function LoadXML(succes:Boolean)
        { 
            trace(refThis.sTest);
            refThis.sTest = "Nu is het dit";
            trace(refThis.sTest);
        }       
                
        var oXML:XML = new XML();
        oXML.ignoreWhite = true;
        oXML.onLoad = LoadXML;
        oXML.load(sFileName);
    }
}

Een functie kan nog wel bij de scope van de parent (SetXML), door hierin een reference te plaatsen naar het XMLParser object kan je de variable wel benaderen.
('t werkt, maar is vast niet de meeste mooie structuur.... :))

Anders zou je de XML class van flash nog kunnen aanpassen misschien door die te extenden.

Verwijderd

Topicstarter
Daar zat ik inderdaad ook al aan te denken. Bedankt in ieder geval voor de info!
Pagina: 1