Avatar billede oldnick Nybegynder
17. juni 2008 - 13:50 Der er 4 kommentarer

XML, AS3 og dynamisk tekstfelt

Hej

Kan I hjælpe mig komme på den rigtige kurs?

Dette er min AS3 script:

var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();

xmlLoader.addEventListener (Event.COMPLETE, LoadXML);

xmlLoader.load (new URLRequest("video.xml"));

function LoadXML (e:Event):void
{
    xmlData = new XML(e.target.data);
    ParseData (xmlData);
}

function ParseData (dataInput:XML):void
{
    var dataList:XMLList = dataInput.item;

    for (var i:int = 0; i < dataList.length(); i++)
    {
        product.text = dataInfo.titel.text()[i];
        description.text = dataInfo.description.text()[i];
        time.text = dataInfo.time.text()[i];
        music.text = dataInfo.music.text()[i];
        comments.text = dataInfo.comments.text()[i];
    }
}

Mit XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<showreel>

  <item>
      <video>28sec.flv</video>
      <titel>28 sharp sec.</titel>
      <description>Short ad for at company</description>
      <time>28</time>
      <music>Artist and song title</music>
      <comments>None</comments>
  </item>

  <item>
      <video>45sec.flv</video>
      <titel>45 sharp sec.</titel>
      <description>Short ad for at company</description>
      <time>45</time>
      <music>Artist and song title</music>
      <comments>None</comments>
  </item>

  <item>
      <video>65sec.flv</video>
      <titel>65 sharp sec.</titel>
      <description>Short ad for at company</description>
      <time>65</time>
      <music>Artist and song title</music>
      <comments>None</comments>
  </item>

</showreel>

Min fla har 5 tekst felter og et video felt (med en container), lige nu har jeg fokus på at få teksten ind i de 5 tekst felter. Der næst skal jeg have lavet en funktion som skal loade det næste "item" fra min xml, efter det antal sekunder der står i "time".

Jeg har en ide om at der er noget galt med det "for-loop" jeg har gang i og måske skal man bruge et "for each" istedet for!

Er der nogen som kan se hvordan det skal gøre og en kort forklaring ville også hjælpe :)
Avatar billede maqhem Nybegynder
17. juni 2008 - 14:53 #1
Behold deklarationen på dataList i din funktion, slet dit loop og erstat det med følgende:

// Hent så første video ind
LoadVideo(0);

// Funktionen der henter videoen ind
function LoadVideo(N:uint):void {
    // Hent videoen
    HentDinVideo(dataList[N].video);
    // Sæt en timer på med korrekt delay
    var T:Timer = new Timer(parseFloat(dataList[N].time.text()) * 1000);
    T.start();
    // Hent næste video, når timeren dispatcher sin event - men kun hvis der er flere videoer!
    T.addEventListener(TimerEvent.TIMER, function(E:Event) {if(N < dataList.length() - 1) {LoadVideo(N + 1); T.stop();}});
}
Avatar billede oldnick Nybegynder
17. juni 2008 - 15:33 #2
tak, for hurtigt svar. Er dog lidt i tvivl hvor henter jeg min tekst fra xml'en??

var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();

xmlLoader.addEventListener (Event.COMPLETE, LoadXML);

xmlLoader.load (new URLRequest("video.xml"));

function LoadXML (e:Event):void
{
    xmlData = new XML(e.target.data);
    ParseData (xmlData);
}

function ParseData (dataInput:XML):void
{
    var dataList:XMLList = dataInput.item;

        // HVORNÅR BLIVER MIN TEKST HENTET
    product.text = dataInfo.titel.text()[i];
    description.text = dataInfo.description.text()[i];
    time.text = dataInfo.time.text()[i];
    music.text = dataInfo.music.text()[i];
    comments.text = dataInfo.comments.text()[i];

    // Hent så første video ind
    LoadVideo (0);

    // Funktionen der henter videoen ind
    function LoadVideo (N:uint):void
    {
        // Hent videoen
        HentDinVideo (dataList[N].video);
        // Sæt en timer på med korrekt delay
        var T:Timer = new Timer(parseFloat(dataList[N].time.text()) * 1000);
        T.start ();
        // Hent næste video, når timeren dispatcher sin event - men kun hvis der er flere videoer!
    }
}
T.addEventListener(TimerEvent.TIMER, function(E:Event) {if(N < dataList.length() - 1) {LoadVideo(N + 1); T.stop();}});
Avatar billede maqhem Nybegynder
17. juni 2008 - 17:01 #3
function ParseData (dataInput:XML):void
{
    var dataList:XMLList = dataInput.item;
    // Hent så første video ind
    LoadVideo (0);

    // Funktionen der henter videoen ind
    function LoadVideo (N:uint):void
    {
        // Sæt teksterne
        product.text = dataList[N].titel.text();
        description.text = dataList[N].description.text();
        time.text = dataList[N].time.text();
        music.text = dataList[N].music.text();
        comments.text = dataList[N].comments.text();
        // Hent videoen
        HentDinVideo (dataList[N].video);
        // Sæt en timer på med korrekt delay
        var T:Timer = new Timer(parseFloat(dataList[N].time.text()) * 1000);
        T.start ();
        // Hent næste video, når timeren dispatcher sin event - men kun hvis der er flere videoer!
        T.addEventListener(TimerEvent.TIMER, function(E:Event) {if(N < dataList.length() - 1) {LoadVideo(N + 1); T.stop();}});
    }
}
Avatar billede oldnick Nybegynder
22. juni 2008 - 08:56 #4
Tak, det tester jeg lige. :)
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