Avatar billede Slettet bruger
03. maj 2010 - 12:23

Fodboldsystem - reload sig selv

Hej eksperter.

Jeg har lavet denne applikation til visning af aktuelle fodboldkampe i forskellige ligaer (demolink: http://www.videobanner.dk/eb/liveresultater2010 )

Når XML-filerne er indlæst, går en timer igang med at tælle ned fra 2 minutter - og når de 2 minutter er gået, skal applikationen genindlæse XML-feed'et.

Det er blevet checket ved at applikationen kører, mens jeg uploader nye test-XML'er, hvor f.eks. scoren er ændret.

Alle kampene oprettes dynamisk som under-movieclips i en tom placeholder og placeres i forlængelse af hinanden.
De tilføjes samtidig med addChild-kommandoen i et MC-array:

for (var i=0; i<udvalgteKampe.length; i++) {
                visFaneblad(udvalgteKampe[i].id, udvalgteKampe[i].forkortelse, i);
                for (j=0; j<udvalgteKampe[i].antalKampe; j++) {
                    var kamp:MovieClip = new Kamp();
                    kamp.hjemmehold_txt.text = udvalgteKampe[i].kampe[j].hjemmehold.toUpperCase();
                    kamp.udehold_txt.text = udvalgteKampe[i].kampe[j].udehold.toUpperCase();
                    kamp.hjemmescore_txt.text = udvalgteKampe[i].kampe[j].hjemmescore;
                    kamp.udescore_txt.text = udvalgteKampe[i].kampe[j].udescore;
                    kamp.id = udvalgteKampe[i].kampe[j].kampid;
                    kamp.kategori = i; // Vi skal huske at denne kamp f.eks. tilhører SAS-liga'en
                    kamp.x = kamptaeller*612;
                    kamp.name = String("kamp"+kamptaeller);
                    kampePlaceholder.addChild(kamp);
                    kampmcarray.push(kamp);
                    kamptaeller++;
                    trace("ID: "+kamp.id);
                    kamp.buttonMode = true;
                    kamp.addEventListener(MouseEvent.CLICK, gaaTilURL);
                }
            }



Jeg har prøvet 3 muligheder

- Javascript, der genindlæser applikationen: virker, men er ikke så hensigtsmæssig, da applikationen skal kunne køre helt uafhængigt)
- Køre en nulstillingsmetode og dermed nulstille alle arrays m.m. (den giver en compilerfejl, når den kaldes fra timerEvent.
- Genindlæse sig selv (den virker fint på ovenstående URL - men Ekstra Bladet har lidt problemer med den, da den tilsyneladende giver en debug-fejl når den afvikles fra deres server)



KODEN til 1. mulighed (javascript):
public function genindlaes(event:TimerEvent) {
    ExternalInterface.call("reloadLive()");       
}


Koden til 2. mulighed - nulstil variabler, arrays og MC's:
public function genindlaes(event:TimerEvent) {
      trace("Vi genindlæser");
      main_mc.cursor_mc.visible = false;
      genindlaesTimer.stop();
      minTimer.stop();

      for (i=0; i<udvalgteKampe.length; i++) {
        // Fjern de eksisterende kamp-mc's fra stage
        removeChild(kampmcarray[i]);
      }
      setVariables();       
      loadCSV(kategoriurl);
}
-> Den giver en fejlmeddelelse når timerEvent køres:
The supplied DisplayObject must be a child of the caller.
    at flash.display::DisplayObjectContainer/removeChild()

Ifølge Flash-manualen betyder det tilsyneladende at et objekt er forsvundet før det forsøges fjernet... men det er IKKE tilfældet! Jeg har f.eks. prøvet at lægge en trace(kampmcarray[i]) ind FØR removeChild og den tracer fint.


Kode til 3. mulighed (genindlæsning af sig selv)
       
        public function genindlaes(event:TimerEvent) {
            trace("Vi genindlæser");
            main_mc.cursor_mc.visible = false;
            genindlaesTimer.stop();
            minTimer.stop();

            var reloadRequest:URLRequest = new URLRequest("liveresultater.swf");
            var loader:Loader = new Loader();
            loader.load(reloadRequest);
            addChild(loader);
        }
-> Den virker som nævnt på ovenstående adresse, men ikke hos Ekstra Bladet (den giver en fejl efter de 2 minutter, hvis man har debug-plugin'et). Jeg kan desværre ikke se nøjagtig, hvad fejlmeddelelsen viser, da EB ikke kører med applikationen lige nu (der er ingen aktuelle kampe i de interessante ligaer).


Jeg er mest interesseret i løsning 2 - men fatter ikke, hvorfor den giver den lidt kryptiske fejlmeddelelse.
Har I et forslag?
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