来自XML

时间:2015-08-04 23:47:40

标签: xml actionscript-3 flash

我通过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++;
    }

}

trace语句按预期工作,迭代也可以工作。

我未能完成的是能够让MovieClip实例继承这些值。我有一个名为MyButton的Library对象,其动态文本字段为title_txt和count_txt。当我为每个循环更改我以实例化一个新的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对象,而是来自自定义类的title_txt不存在的属性myButton的。我认为在与Library对象的名称相匹配的类中设置属性会彼此对应,但似乎并非如此。

在Library对象MyButton中,我有title_txt和count_txt的动态文本字段,我希望用XML填充它。

MyButton.as类定义是一个单独的文件,构建如下:

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 button.fla项目的目标,因此我认为它是隐式绑定的。

如果XML加载干净并且我想要使用的MovieClip存在自定义类,我怎样才能生成带有XML衍生标签和URL的按钮?

1 个答案:

答案 0 :(得分:1)

  

我有一个名为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,你应该相应地输入你的变量。