我正在尝试创建一个小应用程序,通过按下按钮(下一个或后一个)来循环浏览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];
}
希望这是有道理的,如果我需要解释它,我会尽我所能。
干杯
答案 0 :(得分:1)
你的问题是你在尝试循环之前等待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];
}