简体   繁体   English

在Flash AS3中加载XML

[英]Loading XML in Flash AS3

I'm trying to create an application that can show a list of options from an XML. 我正在尝试创建一个可以显示XML选项列表的应用程序。 Then when one option is clicked load data from a different XML to show for the option that they picked which is [j]. 然后,当单击一个选项时,从其他XML加载数据以显示他们选择的选项[j]。

The code I have here only goes to the last variable after being put through the loop so no matter which option i click it goes to the data from the last option. 我在这里拥有的代码仅在经过循环后才转到最后一个变量,因此无论我单击哪个选项,它都将转到最后一个选项中的数据。 It only removes the last child of the original buttons as well. 它也只删除原始按钮的最后一个子元素。

Does anybody have any idea how I could get it to go to the right page? 有人知道如何将其转到正确的页面吗?

import flash.events.Event;
import flash.text.TextField;

var xmlLoader:URLLoader = new URLLoader();
var xmlReq:URLRequest = new URLRequest("http://praxis2.cit.ie/~patrickhallihan/DynamicContent/autumn/classxml.php");
xmlLoader.load(xmlReq);

xmlLoader.addEventListener(Event.COMPLETE, getClasses);
function getClasses(e:Event):void
    {
        var xmlobject:XML = new XML(e.target.data);
        var classlist:XMLList = xmlobject.classgroup;
        var classArray:Array = new Array();

        for (var i:int = 0; i<classlist.length(); i++)
            {
                var classname:String = xmlobject.classgroup.classname[i];
                var classtxt:TextField = new TextField();

                classtxt.width = 70;
                classtxt.height = 20;
                classtxt.border = true; 
                classtxt.borderColor = 0x000000;
                classtxt.background = true; 
                classtxt.backgroundColor = 0x888888;
                classtxt.textColor = 0xFFFFFF;
                classtxt.text = "" + classname;
                addChild (classtxt);
                classArray[i] = classtxt;
            }

        for (var j:int = 0; j<classlist.length(); j++)
            {
                classArray[j].y = 40*j;
                classArray[j].x = 125;
                classArray[j].addEventListener(MouseEvent.CLICK, gotoSchedule);

                function gotoSchedule(event:MouseEvent):void
                    {
                        removeChild (classtxt);

                        var xmlLoader1:URLLoader = new URLLoader();
                        var xmlReq1:URLRequest = new URLRequest("http://praxis2.cit.ie/~patrickhallihan/DynamicContent/autumn/getschedule.php?id="+ j);
                        xmlLoader1.load(xmlReq1);

                        xmlLoader1.addEventListener(Event.COMPLETE, getExams);
                        function getExams(e:Event):void
                            {
                                trace (xmlLoader1.data);
                                var examtxt:TextField = new TextField();
                                examtxt.width = 260;
                                examtxt.height = 400;
                                examtxt.y = 30;
                                examtxt.x = 30;
                                examtxt.border = true; 
                                examtxt.borderColor = 0x000000;
                                examtxt.background = true; 
                                examtxt.backgroundColor = 0x888888;
                                examtxt.textColor = 0xFFFFFF;
                                examtxt.text = (xmlLoader1.data);
                                addChild (examtxt);
                            }
                    }
            }
    }

Not sure if this will fix your problem (refactored your code), but it's cleaner not to have some many anonymous function inside of other functions. 不知道这是否可以解决您的问题(重构代码),但是在其他函数中不要包含许多匿名函数会更干净。 Plus you totally don't need a second for loop. 另外,您完全不需要第二个for循环。

import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;

var classArray:Array = new Array();    

var xmlLoader:URLLoader = new URLLoader();
var xmlReq:URLRequest = new URLRequest("http://praxis2.cit.ie/~patrickhallihan/DynamicContent/autumn/classxml.php");

xmlLoader.addEventListener(Event.COMPLETE, getClasses); //add your listeners BEFORE you call load
xmlLoader.load(xmlReq);

function getClasses(e:Event):void
{
    var xmlobject:XML = new XML(e.target.data);
    var classlist:XMLList = xmlobject.classgroup;

    for (var i:int = 0; i<classlist.length(); i++)
    {
        var classname:String = xmlobject.classgroup.classname[i];
        var classtxt:TextField = new TextField();

        classtxt.width = 70;
        classtxt.height = 20;
        classtxt.border = true; 
        classtxt.borderColor = 0x000000;
        classtxt.background = true; 
        classtxt.backgroundColor = 0x888888;
        classtxt.textColor = 0xFFFFFF;
        classtxt.text = "" + classname;
        addChild (classtxt);
        classArray[i] = classtxt;

        classtxt.y = 40 * i;
        classtxt.x = 125
        classtxt.addEventListener(MouseEvent.CLICK, gotoSchedule);
    }
}    

function getIndexFromTextField(tf:TextField):int {
    for (var i:int = 0; i < classArray.length; i++) {
        if (classArray[i] == tf) {
            return i;
        }
    }
    return -1;
}

function gotoSchedule(event:MouseEvent):void
{
    var tf:TextField = event.currentTarget as TextField;
    removeChild(tf);

    xmlLoader = new URLLoader();
    var xmlReq1:URLRequest = new URLRequest("http://praxis2.cit.ie/~patrickhallihan/DynamicContent/autumn/getschedule.php?id=" + getIndexFromTextField(tf));
    xmlLoader.addEventListener(Event.COMPLETE, getExams);
    xmlLoader.load(xmlReq1);
}

function getExams(e:Event):void
{
    trace(xmlLoader.data);
    var examtxt:TextField = new TextField();
    examtxt.width = 260;
    examtxt.height = 400;
    examtxt.y = 30;
    examtxt.x = 30;
    examtxt.border = true; 
    examtxt.borderColor = 0x000000;
    examtxt.background = true; 
    examtxt.backgroundColor = 0x888888;
    examtxt.textColor = 0xFFFFFF;
    examtxt.text = (xmlLoader.data);
    addChild(examtxt);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM