循环使用XML并返回开始使用按钮 - AS3

时间:2014-02-26 18:32:02

标签: xml actionscript-3 flash

我正在尝试创建一个小应用程序,通过按下按钮(下一个或后一个)来循环浏览XML文档。到目前为止,我已经循环使用并将信息带入了ok。当它到达XML中的最后一条记录并点击下一个按钮时,我希望它显示第一条记录。它目前正在这样做,但你必须按两次按钮。它只是一个小的XML文件,有5条记录。

顺便说一句,这是Actionscript 3。

import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.MouseEvent;

var myXML:XML;
var myLoader:URLLoader = new URLLoader;

myLoader.load(new URLRequest("book.xml"));

myLoader.addEventListener(Event.COMPLETE, processXML);

var i:int;
i = 0;

function processXML(e:Event):void
{
    myXML = new XML(e.target.data);

    txtTitle.text = myXML.film.title[i];
    txtReviewScore.text = myXML.film.rating[i];
}

btnNext.addEventListener(MouseEvent.MOUSE_DOWN, moveNext);
function moveNext(event:MouseEvent)
{
    if (i == 5)

    {
        i = 0
    }

    else

    i = i + 1;
    txtTitle.text = myXML.film.title[i];
    txtReviewScore.text = myXML.film.rating[i];
}

btnPrevious.addEventListener(MouseEvent.MOUSE_DOWN, movePrevious);
function movePrevious(event:MouseEvent)
{   

    if (i == 0)
    {
        i = 5
    }

    else

    i = i - 1;
    txtTitle.text = myXML.film.title[i];
    txtReviewScore.text = myXML.film.rating[i];
}

希望这是有道理的,如果我需要解释它,我会尽我所能。

干杯

1 个答案:

答案 0 :(得分:1)

你的问题是你在尝试循环之前等待i == 5(因此需要按下下一个按钮两次。因为你正在处理一个零索引的元素列表,你实际上是在i == 4(您的元素编号为0,1,2,3,4)的最后一个元素。

如果您所做的更改都是i == 5i == 4,那么这应该按预期工作,但正如我在上面的评论中所提到的,您不应该对此数字进行硬编码。您应该像这样从XML中获取它:

function moveNext(event:MouseEvent)
{
    if (i == myXML.film.length()-1)

    {
        i = 0;
    }

    else

    i = i + 1;
    txtTitle.text = myXML.film.title[i];
    txtReviewScore.text = myXML.film.rating[i];
}

这将使得如果您的XML更改并且突然有多于或少于5条记录,则代码仍然有效。

编辑以回应OP的评论:

由于您在将其用作索引之前正在递减i,因此您不希望将其重置为length-1。相反,您只需将其设置为length

function movePrevious(event:MouseEvent)
{   

    if (i == 0)
    {
        i = myXML.film.length();
    }

    else

    i = i - 1;
    txtTitle.text = myXML.film.title[i];
    txtReviewScore.text = myXML.film.rating[i];
}