Avatar billede bingokaj Nybegynder
03. oktober 2004 - 00:02 Der er 4 kommentarer og
1 løsning

problem med at få fat i mc i loop

Hej

Jeg har et loop, som duplikerer et movieclip:

if (xml_file.firstChild.childNodes[a].childNodes[z].nodeName == "overskrift") {
    var hep = "mc_nyheder.mc_overskrift"+i;
    var nyhed_overskrift = xml_file.firstChild.childNodes[a].childNodes[z].firstChild.nodeValue;
    var nyhed_dato = xml_file.firstChild.childNodes[a].childNodes[z+1].firstChild.nodeValue;
    var nyhed_url = "http://" + xml_file.firstChild.childNodes[a].childNodes[z+2].firstChild.nodeValue;
    var nyhed_descript = xml_file.firstChild.childNodes[a].childNodes[z+3].firstChild.nodeValue;
       
    duplicateMovieClip(_root.mc_nyheder.mc_overskrift, "mc_overskrift"+i, i);
    minx = minx+24;
   
    setProperty(hep, _y, minx);
    setProperty(hep, _alpha, 100);
        _root[hep].overskrift.text = nyhed_overskrift;
        _root[hep].dato.text = nyhed_dato;
           
    //sæt rollover/rollout på nyhedsoversigten
    _root[hep].news_btn.btn_descript = nyhed_descript; //sæt nyhedstekst
    _root[hep].news_btn.onRollOver = pil_rollOver;
    _root[hep].news_btn.onRollOut = pil_rollOut;
    _root[hep].news_btn.onDragOut = pil_rollOut;

    //sæt url på nyhedsoversigten           
    _root[hep].news_btn.btn_url = nyhed_url;
    _root[hep].news_btn.onRelease = function() {
    pil_url(this.btn_url);
};

Mit problem er i linjen:

var hep = "mc_nyheder.mc_overskrift"+i;

som skulle sørge for at de efterfølgende linjer der indeholder _root[hep].news_btn får fat på det rigtige movieclip. Det virker bare ikke :-(

Jeg er 100% sikker på at den rigtige sti i flash er :
_root.mc_nyheder.mc_overskrift.news_btn, men når jeg kører ovenstående loop får den ikke fat på movieclippet. Det mystiske er at jeg tidligere har kørt præcis samme loop, hvor hep bare var sat til : var hep = "mc_overskrift"+i; - hvilket virkede uden problemer. Den eneste ændring jeg har gjort er således at oprette movieclippet mc_nyheder, flytte mc_overskrift indeni  mc_nyheder og dernæst ændre hep til at være :

var hep = "mc_nyheder.mc_overskrift"+i;

Jeg synes sgu' ikke at flash virker specielt logisk, så hvis der er nogle der kan pege mig i den rigtige retning ville det være fedt...
Avatar billede barklund Nybegynder
03. oktober 2004 - 01:42 #1
Well, forklaringen er, at array notation er 1 niveau kun. Ligesom . kun er et niveau. Så hvis du skriver:

_root["mc1.mc2"]

Så er det IKKE det samme som:

_root.mc1.mc2

Det sidste henter movieclippet mc2 der ligger i mc1 der ligger i root. Det første derimod henter movieclippet mc1.mc2 (det er hele navnet) der ligger i root. Det betyder at ovenstående korrekt også kan laves som:

_root["mc1"]["mc2"]
_root["mc1"].mc2
_root.mc1["mc2"]

Alt i alt betyder det, at du kan lave din hep-variabel som "mc_overskrift"+i og så "slå den op" i mc_nyheder som:

_root.mc_nyheder[hep]

Men jeg vil ligesom i dit forrige spørgsmål vende tilbage med den noget pænere løsning med at lave en reference direkte til movieclippet istedet for at evaluere dig frem til den hver gang (samt øvrig kodeforskønnelse á la barklund):

if (xml_file.firstChild.childNodes[a].childNodes[z].nodeName == "overskrift") {
    var nyhed_overskrift = xml_file.firstChild.childNodes[a].childNodes[z].firstChild.nodeValue;
    var nyhed_dato = xml_file.firstChild.childNodes[a].childNodes[z+1].firstChild.nodeValue;
    var nyhed_url = "http://" + xml_file.firstChild.childNodes[a].childNodes[z+2].firstChild.nodeValue;
    var nyhed_descript = xml_file.firstChild.childNodes[a].childNodes[z+3].firstChild.nodeValue;
     
    var hep = duplicateMovieClip(_root.mc_nyheder.mc_overskrift, "mc_overskrift"+i, i);
    minx += 24;
 
    hep._y = minx;
    hep._alpha = 100;
    hep.overskrift.text = nyhed_overskrift;
    hep.dato.text = nyhed_dato;
         
    //sæt rollover/rollout på nyhedsoversigten
    hep.news_btn.btn_descript = nyhed_descript; //sæt nyhedstekst
    hep.news_btn.onRollOver = pil_rollOver;
    hep.news_btn.onRollOut = pil_rollOut;
    hep.news_btn.onDragOut = pil_rollOut;

    //sæt url på nyhedsoversigten         
    hep.news_btn.btn_url = nyhed_url;
    hep.news_btn.onRelease = function() {
        pil_url(this.btn_url);
    };
}

Dine xml-stier er også helt vildt lange - koden bliver meget mere overskuelig hvis du deler det lidt op :) Og det kunne tyde på at du har det hele liggende i to loops (over a og z) - det virker lidt mærkeligt, måske en anden struktur i din xml ville være mere oplagt

--
Morten Barklund
Avatar billede bingokaj Nybegynder
06. oktober 2004 - 17:04 #2
Hej Barklund

Hvis du lægger et svar, så får du også nogle point ;-)

/lars
Avatar billede barklund Nybegynder
06. oktober 2004 - 18:45 #3
Banko!
Avatar billede barklund Nybegynder
06. oktober 2004 - 18:45 #4
Bingo mener jeg!
Avatar billede barklund Nybegynder
07. oktober 2004 - 20:11 #5
Wee tak :P
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