ActionScript 3.0 - 更改 Url 从 Class 导入

ActionScript 3.0 - Change Url import from a Class

我想导入一个 XML 文件并将其添加到网格中。那部分我已经完成了,但是我想使用 class 来更改 XML 文件。现在,文件卡在原来的文件上了。

示例class:

package {
    import fl.controls.dataGridClasses.DataGridColumn;
    import fl.data.DataProvider;
    import flash.net.*;
    import flash.events.*;
    import fl.controls.DataGrid;
    import fl.data.DataProvider;
    import flash.display.Stage;
    import flash.display.MovieClip

    public class Tabellkamp extends MovieClip {
        public var link1: String = new String("_blank");
        public var request: URLRequest;
        public var loader: URLLoader;
        public var gridd: DataGrid = new DataGrid();

        public function Tabellkamp() {
            loader.load(request);
            loader.addEventListener(Event.COMPLETE, loaderCompleteHandler);
            var loader: URLLoader = new URLLoader();

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

        function loaderCompleteHandler(event: Event): void {
            var teamXML: XML = new XML(loader.data);
            var firstCol: DataGridColumn = new DataGridColumn("somthing on the xml");
            firstCol.headerText = "first";
            gridd.columns = [firstCol];
            addChild(gridd);
        }
    }
}

主要时间线/其他class:

public class Lagegridd extends MovieClip {

    public function Lagegridd() {

        btn_1.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);

        function fl_MouseClickHandler(event: MouseEvent) {
            var newXML: Tabellkamp = new Tabellkamp();
            newXML.link1="newxmlfile.xml";
            addChild(newXML);
        }

也许代码还有其他问题,但主要问题是如何更改 url,然后是 addChild()。不用管网格,这只是一个例子。

我感谢一些帮助,关于如何多次使用 class。

很简单。销毁现有实例并创建一个新实例。另外,不要在其他函数中声明函数。

public class Lagegridd extends MovieClip
{
    public function Lagegridd()
    {
        btn_1.addEventListener(MouseEvent.CLICK, onClick);
    }

    private var currentGrid:Tabellkamp;
    private var gridSource:Array = ["file1.xml", "file2.xml", "file3.xml"];

    private function onClick(e:MouseEvent):void
    {
        // Obtain the first element from the list.
        var anUrl:String = gridSource.shift();

        changeGrid(anUrl);
    }

    private function changeGrid(url:String):void
    {
        if (currentGrid)
        {
            removeChild(currentGrid);

            // Another cleanup routines here, if necessary.
        }

        currentGrid = new Tabellkamp;

        // You need to define this function instead of loading
        // data from "link1" inside the object constructor.
        currentGrid.loadData(url);

        addChild(currentGrid);
    }
}

UPD:OOP 示例。

package
{
    import flash.display.Sprite;

    import flash.system.System;

    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.events.SecurityErrorEvent;

    import flash.net.URLRequest;
    import flash.net.URLLoader;

    // Don't use MovieClip if you don't have frames and timelines.
    public class LasteinnXML extends Sprite
    {
        public var url:String;
        public var loader:URLLoader;

        public var dataProvider:XML;

        public function load(path:String):void
        {
            url = path;

            loader = new URLLoader;
            loader.addEventListener(Event.COMPLETE, onData);

            // Always handle erroneous cases. Last three arguments are there
            // because it is wise to not unsubscribe from these events but
            // let the garbage collector decide when to destroy them.
            loader.addEventListener(IOErrorEvent.IO_ERROR, onError, false, 0, true);
            loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError, false, 0, true);

            // You don't need to store the request object.
            loader.load(new URLRequest(url));
        }

        private function onData(e:Event):void
        {
            try
            {
                dataProvider = new XML(loader.data);
                finishLoading();
            }
            catch (fail:Error)
            {
                // There's another erroneous case even if loading is fine:
                // Invalid XML data. Always chack for it as well.
                onError(null);
            }

            // Handle the SUCCESSFUL case here.
        }

        private function finishLoading():void
        {
            // Cleanup routines. Dispose of your objects once you don't need them.
            if (!loader) return;

            loader.removeEventListener(Event.COMPLETE, onData);

            loader = null;
        }

        private function onError(e:Event):void
        {
            // In case the object was already destroyed
            if (!loader) return;

            finishLoading();

            // Handle the ERRONEOUS case here.
        }

        public function destroy():void
        {
            finishLoading();

            // The recommended way of cleaning XML data up.
            if (dataProvider)
            {
                System.disposeXML(dataProvider);
                dataProvider = null;
            }
        }
    }
}

用法:

var A:LasteinnXML = new LasteinnXML;
var B:LasteinnXML = new LasteinnXML;
var C:LasteinnXML = new LasteinnXML;

addChild(A);
addChild(B);
addChild(C);

A.load("filea.xml");
B.load("fileb.xml");
C.load("filec.xml");

C.destroy();
removeChild(C);