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

[ActionScript 2.0] buiten onLoad een array vullen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het uitlezen van een CSV bestand. Aan de hand van de inhoud moet voor elke rij de id aan een array toegevoegd worden. Deze array staat buiten de onLoad omdat ook hierbuiten id's toegevoegd worden.

HIeronder de versimpelde code:

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
functie = function {
  level = this;
  var ids = new Array();

  ids.push('test');

  csvObject.onLoad = function(success:Boolean) {
    if (success) {
      for (f=0; f<andereArray.length;f++) {
        if (conditie)
          ids.push('test2');
      }
    }
  }

  trace(ids.length);
}


ids.length blijft 1 weergeven. Heb van alles geprobeert. In de onLoad wordt ids[0] gewoon herkend als 'test'.
level.ids.push('test2') werkt ook niet.
_parent.ids.push('test2') werkt ook niet.

Heeft iemand de gouden tip? Ben hier al dagen mee bezig.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 16:28

TeeDee

CQB 241

Is dat je daadwerkelijke code? Ik heb 0,0 ervaring met AS maar iets als
JavaScript:
1
ids.push('test2);
lijkt me een syntax error op te leveren (in het beste geval).

Kijk anders ook even of je met een simpelere variant het e.e.a. aan ids kan toevoegen.
JavaScript:
1
2
3
      for (f=0; f<10;f++) {
          ids.push('f:'+f);
      }

[ Voor 34% gewijzigd door TeeDee op 04-03-2008 17:08 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
TeeDee schreef op dinsdag 04 maart 2008 @ 17:06:
Is dat je daadwerkelijke code? Ik heb 0,0 ervaring met AS maar iets als
JavaScript:
1
ids.push('test2);
lijkt me een syntax error op te leveren (in het beste geval).

Kijk anders ook even of je met een simpelere variant het e.e.a. aan ids kan toevoegen.
JavaScript:
1
2
3
      for (f=0; f<10;f++) {
          ids.push('f:'+f);
      }
Yep, die regel met push werkt gewoon.
De bovenste push vult de array aan met 'test'.
Opvragen van ids[0] levert ook 'test' op.
Ik heb ook gecheckt of de variabele die ik aan de array wil toevoegen de juiste waarde bevat, en dit is inderdaad het geval.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 16:28

TeeDee

CQB 241

En een var ids:Array=new Array();

even voor de duidelijkheid: het laatste stukje code had je ook getest? Je weet trouwens ook zeker dat andereArray.length > 0 is?

[ Voor 69% gewijzigd door TeeDee op 04-03-2008 18:15 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
TeeDee schreef op dinsdag 04 maart 2008 @ 18:13:
En een var ids:Array=new Array();

even voor de duidelijkheid: het laatste stukje code had je ook getest? Je weet trouwens ook zeker dat andereArray.length > 0 is?
100% zeker, ben weer de hele avond bezig geweest, maar weinig opgeschoten.
Het is in de onLoad functie wel mogelijik met _root om de "ids" Array uit te breiden d.m.v. Push. Als ik deze uitlees zitten ook de juiste variabelen in de Array. Maar zodra ik de "ids" buiten de onLoad functie uitlees dan zijn de toegevoegde variabelen weer verdwenen.

Ik weet dat de variabelen die in een functie aangemaakt worden buiten deze functie niet gelezen kunnen worden. Het moet toch echter wel mogelijk zijn om een variabele die BUITEN de functie aangemaakt is aan te passen (in dit geval een array die aangevuld wordt)?

Voor de duidelijkheid, ik kan de "ids" array die BUITEN de onLOAD functie aangemaakt is BINNEN de onLoad functie gewoon uitlezen en aanvullen. Het probleem is om deze weer mee te nemen BUITEN de onLoad functie.

Aangepaste code:

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
functie = function {
  _root.ids = new Array();
  _root.ids.push('test1');

  csvObject.onLoad = function(success:Boolean) {
    if (success) {
      for (f=0; f<andereArray.length;f++) {
        if (conditie)
          _root.ids.push('test2');
      }
    }
    trace (_root.ids); // output 'test1, test2'
  }

  trace(_root.ids); output 'test1', moet dus 'test1, test2' zijn
}

[ Voor 17% gewijzigd door Verwijderd op 05-03-2008 08:34 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik zie nog steeds
JavaScript:
1
_root.ids.push('test2);
staan* en je maakt mij niet wijs dat dat werkt; je sluit een string literal gewoon niet af en dat geeft geheid problemen. Als je eens begint dat te fixen...

* Zelfs onze syntax-highlighter slaat alarm en zet er een rode streep onder; dat moet toch voldoende zeggen? (ook al is het dan een js highlighter :P )

[ Voor 30% gewijzigd door RobIII op 05-03-2008 00:47 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
RobIII schreef op woensdag 05 maart 2008 @ 00:45:
Ik zie nog steeds
JavaScript:
1
_root.ids.push('test2);
staan* en je maakt mij niet wijs dat dat werkt; je sluit een string literal gewoon niet af en dat geeft geheid problemen. Als je eens begint dat te fixen...

* Zelfs onze syntax-highlighter slaat alarm en zet er een rode streep onder; dat moet toch voldoende zeggen? (ook al is het dan een js highlighter :P )
Ah zie ik nu pas, in mijn code staat dat gewoon goed, is een typfoutje hier 8)7
Maar zoals ik hierboven vermeld heb, de array wordt gewoon goed gevuld, maar is buiten de onload functie niet meer opvraagbaar

Edit: code verbetert in beide voorbeelden

[ Voor 3% gewijzigd door Verwijderd op 05-03-2008 08:35 ]


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 16:28

TeeDee

CQB 241

Waarschijnlijk bevat _root.ids in je 2e trace wel de correcte gegevens, alleen kom je in je 2e trace al terecht _voordat_ je onLoad klaar is.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11:59

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Volgens mij heb ik een zelfde soort probleem gehad.
Ik heb uiteindelijk de loadVars.onLoad naar frame 2 laten gaan als het een succes was en daar kun je gewoon vrolijk je cvsObject accessen.

Zoals TeeDee zei, je traced de gegevens voordat de data geladen is omdat Flash de rest van het script al heeft uigevoerd voordat het de data heeft geladen..

  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

De onload function heeft een andere scope als je toplevel functie. Je zult dus een variabele door moeten geven aan het csvObject die je dan kan accessen:

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
functie = function {
  level = this;
  var ids = new Array();

  ids.push('test');

  csvObject.ids = ids;

  csvObject.onLoad = function(success:Boolean) {
    if (success) {
      for (f=0; f<andereArray.length;f++) {
        if (conditie)
          this.ids.push('test2');
      }
    }
  }

  trace(ids.length);
}

Raar... Is zo gek nog niet


  • LB Back
  • Registratie: November 2004
  • Laatst online: 03-06 11:07
Tsjilp schreef op vrijdag 07 maart 2008 @ 10:49:
De onload function heeft een andere scope als je toplevel functie. Je zult dus een variabele door moeten geven aan het csvObject die je dan kan accessen:

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
functie = function {
  level = this;
  var ids = new Array();

  ids.push('test');

  csvObject.ids = ids;

  csvObject.onLoad = function(success:Boolean) {
    if (success) {
      for (f=0; f<andereArray.length;f++) {
        if (conditie)
          this.ids.push('test2');
      }
    }
  }

  trace(ids.length);
}
Plus dat, zoals al eerder opgemerkt, die trace voor de onload kan worden uitgevoerd zodat die lengte nog steeds 1 is.
Pagina: 1