卸载xml文件并使用AS3中的MouseEvent.CLICK事件侦听器加载新的xml文件

时间:2013-03-18 04:13:27

标签: xml actionscript-3

我正在开发一个项目,我正在使用XML创建一个按钮列表。当您按下其中一个按钮时,会加载一个新的xml,它会像您一样创建“子按钮”。

使用我编写的代码,一切正常,除了按下顶级按钮(第一级按钮)时,它会加载创建子按钮的xml并加载一些文本数据但是当我按下另一个顶部时 - 级别按钮,它加载新的xml,创建子按钮,加载不同的文本数据,.......但是,旧的子按钮也在那里....

我希望能够删除旧的子按钮。我用谷歌搜索,但我无法得到任何帮助:/任何帮助将不胜感激。

代码从创建顶级按钮开始,并且已经为这些按钮分配了CLICK MouseEvent。

function onButtonClick(me:MouseEvent):void {
    xmlLoader.load(new URLRequest(bookElement.xmllink.toString()));
    xmlLoader.addEventListener(Event.COMPLETE, onSubXmlLoad);
}

function onSubXmlLoad(e:Event):void {
    trace("xml loaded");
    new_sub_xml = new XML(sub_xmlLoader.data);
    var Books:XMLList = new_sub_xml.name.books;
    var len:int = Books.length();
    trace(len + " Books");

    for (var i:int = 0; i < len; i++) {
            sub_btn = new SubFeatureButton();
            sub_btn.x = 10 + i * 50;
            sub_btn.y = 90;
            addChild(sub_btn);
            sub_btn.name = "sub_btn" + i;
            sub_btn.buttonMode = true;
            trace(sub_btn + i);

    }
}

1 个答案:

答案 0 :(得分:0)

您可能应该为子导航按钮创建一个容器,同时在某种数组中保留对这些按钮的引用会使事情变得更容易。

以下代码应该有效

var subNav:Sprite = new Sprite();
subNav.x = 0;
subNav.y = 0;//put the right values here
addChild(subNav);

function onButtonClick(me:MouseEvent):void {
    xmlLoader.load(new URLRequest(bookElement.xmllink.toString()));
    xmlLoader.addEventListener(Event.COMPLETE, onSubXmlLoad);
}

function onSubXmlLoad(e:Event):void {
    trace("xml loaded");
    new_sub_xml = new XML(sub_xmlLoader.data);
    var Books:XMLList = new_sub_xml.name.books;
    var len:int = Books.length();
    trace(len + " Books");

    while(subNav.numChildren >0)
    {
        subNav.removeChildAt(0);
    }

    for (var i:int = 0; i < len; i++) {
            sub_btn = new SubFeatureButton();
            sub_btn.x = 10 + i * 50;
            sub_btn.y = 90;
            subNav.addChild(sub_btn);
            sub_btn.name = "sub_btn" + i;
            sub_btn.buttonMode = true;
            trace(sub_btn + i);

    }
}