使用加载xml访问actionscript 3中的/ Scope问题

时间:2010-08-23 15:00:22

标签: xml actionscript-3 actionscript scope

好了,现在解释我的问题可能最简单了,我能够写出需要加载到舞台上动态文本字段的xml文件的名称,但是,我似乎无法做到在此之后访问它并从中删除必要的数据,这是我的代码:

var tf:TextField = new TextField();
tf.autoSize=TextFieldAutoSize.LEFT;
tf.border=true;
addChild(tf);

try {
var keyStr:String;
var valueStr:String;
var paramObj:Object=LoaderInfo(this.root.loaderInfo).parameters;
 for (keyStr in paramObj) {
 valueStr=String(paramObj[keyStr]);
 tf.appendText(valueStr + "\n");
}
} catch (error:Error) {
 tf.appendText("error");
}

// load and parse the xml
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
xmlLoader.load(new URLRequest(valueStr));

function LoadXML(e:Event):void {
xmlData=new XML(e.target.data);
xmlData.ignoreWhite = true;
var items:XMLList = xmlData.resource;
var tarray:Array = new Array();

 for each (var resource:XML in items) {
  tarray.push(resource.@src);
 }

  c3 = tarray.pop();
  c2 = tarray.pop();
  c1 = tarray.pop();

我的xml看起来像这样,有人看到我做错了吗?

 <?xml version="1.0" encoding="utf-8"?>
 <xml>
 <resource id="thing1" src="swf1.swf" />
 <resource id="thing2" src="swf2.swf" />
 <resource id="thing3" src="swf3.swf" />
 </xml>

非常感谢

// UPDATE

好的,当我直接加载xml:

时,这个场景现在可以正常工作了
                    var xmlLoader:URLLoader = new URLLoader();
        var xmlData:XML = new XML();
        xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
        xmlLoader.load(new URLRequest("testxml.xml"));   

        function LoadXML(e:Event):void {
        xmlData=new XML(e.target.data);
        xmlData.ignoreWhite = true;
        var items:XMLList = xmlData.resource;
        var tarray:Array = new Array();

            for each (var resource:XML in items) {
                tarray.push(resource.@src);
            }

            c3 = tarray.pop();
            c2 = tarray.pop();
            c1 = tarray.pop();

            trace("c1"+c1+"c2"+c2+"c3"+c3); // traces my swf files

然后,附加到按钮的代码成功加载文件:

var swf:MovieClip;
var loader:Loader = new Loader();
var defaultSWF:URLRequest = new URLRequest(c1); 

所以我现在要做的就是能够实现相同的功能,但是像以前一样用loadvars加载xml,从我的跟踪看来似乎有一个范围问题,但我不知道为什么“ c1“可以像上面那样引用..?

感谢

2 个答案:

答案 0 :(得分:0)

您并未真正展示相关代码的一部分。在这里,我们看到您从flashvars获取XML URL并将XML数据分配给数组。

对c1,c2&amp;的分配c3看起来有点奇怪。为什么使用pop()方法?

如果tarray是一个图像url数组,为什么不使用tarray的数据加载你的图像呢?

检查跟踪语句是否有错误!

import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.*;
import flash.net.URLRequest;

for each( var url:String in tarray )
{
    var loader:Loader = new Loader();
    var info:LoaderInfo = loader.contentLoaderInfo;

    info.addEventListener(Event.COMPLETE , completeHandler );
    info.addEventListener(IOErrorEvent.IO_ERROR , errorHandler );

    loader.load(new URLRequest(url));
}

function completeHandler(event:Event):void
{
 trace( event );
}

function errorHandler(event:IOErrorEvent):void
{
 trace( event );
}


答案 1 :(得分:0)

尝试使用trace(xmlData)来确保实际上已加载XML。

您的代码是否会产生任何错误?