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



我正在尝试创建一个小应用程序,只需按一下按钮(下一个或后退),即可循环浏览XML文档。到目前为止,我已经循环播放并正常提供信息。当它到达 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];
}

希望这是有道理的,如果我需要解释更多,我会尽力而为。

干杯

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

如果您更改的所有内容都i == 5 i == 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];
}

最新更新