我想将一个xml文件交给swf并让swf为xml文件中的每个链接生成一个动态文本框和按钮
基本导航
这是xml
<?xml version="1.0" encoding="UTF-8"?>
<page>
<page name="Page Name 1" url="/page-1/" />
<page name="Page Name 2" url="/page-2/" />
<page name="Page Name 3" url="/page-3/" />
<page name="Page Name 4" url="/page-4/" />
</page>
在我的文章中,我的库中有一个名为'nav_button'的按钮
有一个名为actions的图层,在第1帧中我有这个
var xml:XML;
var xmlList:XMLList;
var xmlLoader:URLLoader = new URLLoader();
var button:Button = new Button();
xmlLoader.load(new URLRequest("links.xml"));
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
function xmlLoaded(event:Event):void
{
xml = XML(event.target.data);
xmlList = xml.children();
trace(xml.length());
for(var i:int = 0; i < xmlList.length(); i++)
{
button = new Button();
button.x = 25;
button.y = i * 50 +25;
addChild(button);
}
}
xml导入正常,但是当涉及到for循环并将按钮和文本框添加到舞台时,我敬酒
答案 0 :(得分:2)
您的xml文件无效。它只能包含一个根节点。
试试这个:
<?xml version="1.0" encoding="UTF-8"?>
<pages>
<page name="Page Name 1" url="/page-1/" />
<page name="Page Name 2" url="/page-2/" />
<page name="Page Name 3" url="/page-3/" />
<page name="Page Name 4" url="/page-4/" />
</pages>
这是您第一帧的代码:
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
xmlLoader.load(new URLRequest("links.xml"));
function xmlLoaded(event:Event):void {
var pages:XML = new XML(event.target.data);
var i:int = 0;
for each (var page:XML in pages.page) {
var button:LinkButton = new LinkButton();
button.x = 25;
button.y = i * 50 + 25;
button.label = page.attribute("name");
button.url = page.attribute("url");
addChild(button);
trace(i++);
}
}
你需要一个自定义按钮类:
package {
import fl.controls.Button;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.navigateToURL;
public class LinkButton extends fl.controls.Button {
public var url:String;
public function LinkButton(){
super();
this.addEventListener(MouseEvent.CLICK, clickHandler);
}
private function clickHandler(mouseEvent:MouseEvent) {
flash.net.navigateToURL(new URLRequest(url), "_blank");
}
}
}
也许我需要更详细地解释一下:
我强烈建议你再接受一些培训。 Lee Brimelows site是一个很好的起点。
答案 1 :(得分:1)
我意识到这已经过时了,但今天对我来说是新的。
我不明白你为什么要创建一个自定义按钮类。我认为没有必要完成你想要做的事情。
function xmlLoaded(event:Event):void {
var pages:XML = new XML(event.target.data);
var i:int = 0;
for each (var page:XML in pages.page) {
var button:LinkButton = new LinkButton();
button.x = 25;
button.y = i * 50 + 25;
button.label = page.attribute("name");
button.url = page.attribute("url");
addChild(button);
trace(i++);
}
}
上面的函数尽管很好,但为什么不在for循环中添加事件监听器呢?添加以下行:
button.addEventListener(MouseEvent.CLICK, gotoURL);
在for循环中,然后添加函数:
function gotoURL(e:MouseEvent):void
{
navigateToURL(new URLRequest(e.target.url));
}
这将消除创建外部文件和自定义类的需要。