我通过ActionScript 3.0成功地将一个具有粗略结构的远程XML文档拉入Flash CC
AS3看起来像:
import flash.events.Event;
import flash.net.URLLoader;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.navigateToURL;
var myXML: XML = new XML();
var myXMLList:XMLList = new XMLList;
var XML_URL: String = "http://dirtymitten.org/xmlbuttons.xml";
var myXMLURL: URLRequest = new URLRequest(XML_URL);
var myLoader: URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener(Event.COMPLETE, xmlLoaded);
function xmlLoaded(event: Event): void {
myXML = XML(myLoader.data);
trace("data loaded");
var i:int = 1;
var number_txt:String;
for each (var node in myXML.Listing)
{
number_txt = "button number " + i.toString();
trace(node.Title);
trace(node.Url);
trace( number_txt );
i++;
}
}
跟踪语句按预期工作,并且迭代也正常工作。
我未能完成的是能够得到一个MovieClip实例来继承这些值。我有一个名为MyButton的库对象,带有动态文本字段title_txt和count_txt。当我改变for each循环来实例化一个新的MyButton实例时,我得到了一些错误:
...
for each (var node in myXML.Listing)
{
var myButton:MyButton = new MyButton();
myButton.title_txt.text = node.Title;
myButton.count_txt.text = i.toString();
myButton.url = node.Url;
number_txt = "button number " + i.toString();
trace(node.Title);
trace(node.Url);
trace( number_txt );
i++;
}
...
我的错误读取Scene 1, Layer 'actions', Frame 1, Line 27, Column 22 1119: Access of possibly undefined property text through a reference with static type String.
,另一个是第28行,对应于:
myButton.title_txt.text = node.Title;
myButton.count_txt.text = i.toString();
意味着文本属性不支持开箱即用,或者我没有访问MovieClip对象,而是自定义类MyButton中不存在的title_txt
属性。我原以为在类中设置与Library对象的名称相匹配的属性会彼此对应,但事实似乎并非如此。
在库对象MyButton中,我有title_txt和count_txt的动态文本字段,我想用XML填充。
色。类定义是一个单独的文件,构建方式如下:
package {
import flash.events.Event;
import flash.net.URLLoader;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.navigateToURL;
public class MyButton extends MovieClip {
// constructor code
public var url:String;
public var title_txt:String;
public var count_txt:String;
public function MyButton(){
this.addEventListener(MouseEvent.CLICK, clickHandler);
}
private function clickHandler(e:MouseEvent):void{
if (!url) return;
navigateToURL(new URLRequest(url), "_blank");
}
}
}
我没有显式地包含该文件,因为它是自行生成的,然后再编辑,所以我假设它绑定到Library MovieClip,不需要显式导入MyButton.as。它是xml按钮的目标。
如何生成一个带有XML派生标签和url的按钮,假设XML加载干净,并且存在我想要使用的MovieClip的自定义类?
我有一个名为MyButton的Library对象,带有动态文本字段title_txt和count_txt。
不,你不需要。您有一个类,它具有上述名称的String变量:
public class MyButton extends MovieClip {
public var url:String;
public var title_txt:String; //THIS IS A STRING, NOT A TEXTFIELD!!!
public var count_txt:String;
但是字符串不是TextFields。就像苹果不是橘子一样。
如果你想有TextFields,你应该相应地输入你的变量