PDA

Volledige versie bekijken : xml nested loop


Jobu
%Europe/Berlin %810 %2005, 20:27
Hallo,

Ik probeel via een xml-file dynamisch een aantal albumknoppen aan te maken (dit lukt), die nadat je erop klikt de foto's van het aangeklikte album moet vertonen.
Daar zit het em.... in mijn functie CreateAlbums maak ik een nested loop, die de foto's moet aanmaken bij een onPress, maar voor elk album geeft hij me er steeds 5(foto's), terwijl er respectievelijk 3, 4 en 5 foto's in de albums zijn.
Een tweede probleem is dat mijn aangemaakte albumknoppen verdwijnen nadat ik erop geklikt heb ...
Wat loopt er mis met mijn geneste for-loop of in mijn onPress??

<?xml version="1.0"?>

<gallery>
<album album_path = "80" album_name = "Album of Death">
<photo pic_path="pics/death1.jpg" title="death1"/>
<photo pic_path="pics/death2.jpg" title="death2"/>
<photo pic_path="pics/death5.jpg" title="death3"/>
</album>
<album album_path = "81" album_name = "Album of the Living">
<photo pic_path="pics/death1.jpg" title="death1"/>
<photo pic_path="pics/death2.jpg" title="death2"/>
<photo pic_path="pics/death3.jpg" title="death3"/>
<photo pic_path="pics/death4.jpg" title="death4"/>
</album>
<album album_path = "82" album_name = "Album 3">
<photo pic_path="pics/death1.jpg" title="death1"/>
<photo pic_path="pics/death2.jpg" title="death2"/>
<photo pic_path="pics/death3.jpg" title="death3"/>
<photo pic_path="pics/death4.jpg" title="death4"/>
<photo pic_path="pics/death5.jpg" title="death5"/>
</album>
</gallery>

var spacing:Number = 19;

function CreateAlbums(my_xml){
var albums = my_xml.firstChild.childNodes;

for (var i:Number=0; i<albums.length;i++){
current_album = albums[i];
alb_mc = attachMovie("album_btn","album_"+i,this.getNextHighestDepth()+1000);
alb_mc._y = 100 + (spacing * i);
alb_mc.album_txt.text = current_album.attributes.album_name;
alb_mc.onRollOver = function(){
this.play("begin");
}
alb_mc.onPress = function(){
this.gotoAndStop("einde");
var fotoplek:Number = 100;
var photos = current_album.childNodes;
for (var i:Number=0; i<photos.length;i++){
current_image = photos[i];
trace(current_image.attributes.pic_path);
var picholder = _root.createEmptyMovieClip("holder_"+i,i);
trace(current_album);
picholder.loadMovie(current_image.attributes.pic_p ath);
picholder._y = 200;
picholder._x = 100 * i;
}
}

}
}

var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.onLoad = function(success){
if(success){
CreateAlbums(my_xml);

}
else{
trace ("Loading was Unsuccessful!");
}
}

my_xml.load("gallery.xml");

Flasher
%Europe/Berlin %847 %2005, 21:20
var photos = current_album.childNodes;
for (var i:Number=0; i<photos.length;i++)

Hier gaat het mis. Op het moment dat de onPress wordt uitgevoerd is current_album gelijk aan het laatste album.

alb_mc.photos = current_album.childNodes.concat() //kopieert de array
alb_mc.onPress = function() {
this.gotoAndStop("einde");
var fotoplek:Number = 100;
for (var i:Number=0; i<photos.length;i++)
//enz

Ik weet trouwens niet zeker of die concat() nodig is, dat moet je zelf maar proberen

Laiverd
%Europe/Berlin %911 %2005, 22:52
Bovendien gebruik je in beide for loops steeds "i" als variabele; da's nie zo handig als ze genest zijn.

John

Jobu
%Europe/Berlin %922 %2005, 23:08
Ja, als ik opnieuw naar mijn script bekijk lijkt het me logisch dat het de laatste album is die weergegeven wordt..... 8~
Ik test het morgenavond eens uit en laat iets weten.

Bedankt

Jobu
%Europe/Berlin %893 %2005, 22:27
Ik denk dat er iets mis zit met mijn redenering ...

Via jullie hulp heb ik mijn script aangepast, en het werkt ... maar nu blijven die foto's van elk album staan, --> ze verdwijnen dus niet telkens er een nieuw album aangedrukt wordt.
En ik zou helemaal niet weten hoe ik dit moet aanpakken ... removeMovieClip() ... maar hoe?

Ik heb ook nog commentaren tags willen toevoegen als nieuwe Childs van de photo tag.
<photo pic_path="pics/death1.jpg" title="death1">
<comment author="naam1" datum="01-09-2005">
<![CDATA[dit is commentaar 1]]>
</comment>
<comment author="naam2" datum="02-10-2005">
<![CDATA[dit is commentaar 2]]>
</comment>
</photo>

Door een picholder.onPress te plaatsen in de 2e for loop (de eerste nesting) dacht ik opnieuw een functie in te brengen die mij in een dynamisch veld ALLE commentaren van het betreffende album toont. Dit lukt helemaal niet en is volgens mij een slechte manier om dit aan te pakken ...

Ik zoek geen kant en klare oplossing, want het is vooral een zoektocht, maar kan iemand me eens in de goede richting brengen van hoe ik dit moet aanpakken?? Enkel via de geneste loops, of anders??? Ja, het zal niet simpel zijn om dit uit te leggen, maar misschien is dat kleine zinnetje van u wel net wat mij EUREKA zal doen roepen ... so try me!!

Bedankt voor jullie tijd!

theFlashWizard
%Europe/Berlin %094 %2005, 03:16
mischien heb je wat aan de tuturial op gotoAndLearn.com. die gaat over een simpele photoviewer met xml.
dus zitten daar ook loops in ;)
en anders heb je mischien voor loops hier wat aan:
http://www.actionscripts.org/tutorials/intermediate/loops/index.shtml
http://www.actionscripts.org/tutorials/intermediate/Nested_loops/index.shtml

Jobu
%Europe/Berlin %315 %2005, 08:33
Ik snap het principe van (nested) loops wel, maar ik denk dat mijn aanpak gewoon mis is.
Met PHP heb ik totaal geen moeite om zulke structuren op te bouwen, maar in Flash ...
Bon ... ik zal maar wat verder lezen en prutsen, en hopelijk kom ik er uit.

Toch bedankt voor de moeite