Проблема с доступом / областью действия в Actionscript 3 с загрузкой XML - PullRequest
0 голосов
/ 23 августа 2010

Хорошо, теперь, наверное, проще всего объяснить мою проблему следующим образом: я могу написать имя моего 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>

Большое спасибо

// ОБНОВЛЕНИЕ

ОК, теперь этот сценарий работает нормально, когда я напрямую загружаю 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); 

Итак, все, что я хочу сейчас сделать - это добиться того же, но загружать xml с помощью loadvars, как я делал раньше, из моих следов кажется, что есть проблема с областью действия, но я не уверен, почему, если на c1 "можно ссылаться так же, как и выше ..?

спасибо

Ответы [ 2 ]

0 голосов
/ 23 августа 2010

Попробуйте использовать трассировку (xmlData), чтобы убедиться, что вы действительно загрузили XML.

Ваш код вызывает какие-либо ошибки?

0 голосов
/ 23 августа 2010

Вы не показываете ту часть кода, которая имеет отношение к делу.Здесь мы видим, что вы получаете ваш XML-URL из flashvars и назначаете данные XML в массив.

Назначение для c1, c2 и 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 );
}


...