Frage

, wenn die Datenverarbeitung, ich muss immer die folgende schreiben:

var dataSourceRequest:URLRequest = new URLRequest("/path/file.xml");
var dataSourceLoader:URLLoader = new URLLoader(dataSourceRequest);
dataSourceLoader.addEventListener(Event.COMPLETE, handleDataSource);

, während ich die Nützlichkeit dieser 2 Objekte verstehen und Ereignis-Listener getrennt ist, da sie oft Arbeit miteinander ich würde gerne wissen, ob es eine Methode ist, dass sie alle kombinieren? Die nächstgelegene ich bekommen kann, ist das, aber es ist ein bisschen sinnlos / Verschachtelung:

var dataSourceLoader:URLLoader = new URLLoader(new URLRequest("/path/file.xml"));
dataSourceLoader.addEventListener(Event.COMPLETE, handleDataSource);

Was ich wirklich Liebe wäre etwas, das automatisch die URLRequest kombiniert, URLLoader und abgeschlossen Ereignis-Listener wie folgt aus:

var dataSource:Whatever = new Whatever("/path/file.xml", handleDataSource);
War es hilfreich?

Lösung

Nein ... es ist eine architektonische Entscheidung, dass Adobe gemacht und ein guter noch dazu. Zwei zwei Klassen tun sehr verschiedene Jobs und machen diese Arbeitsplätze gut. Der Ereignis-Listener können Sie die komplette Ereignis mehrfach zu handhaben und so ist viel flexibler als ein Rückruf in diesem Fall.

Sie können jedoch eine Klasse erstellen, die alle hüllt, dass Funktionalität und funktioniert genau so, wie Sie es zu!

Andere Tipps

Encapsulate dass Code in Ihre eigene Klasse. Es könnte so einfach sein wie folgt aus:

package
{
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;

    public class EncapsulatedURLLoader
    {
        protected var _callback:Function;

        public function EncapsulatedURLLoader( dataUrl:String, callback:Function )
        {
            _callback = callback;
            var l:URLLoader = new URLLoader();
            l.addEventListener( Event.COMPLETE, onComplete );
            l.load( new URLRequest( dataUrl ) );
        }

        private function onComplete( event:Event ):void 
        {
            event.target.removeEventListener( Event.COMPLETE, onComplete );
            _callback.call( null, event.target.data );
        }
    }
}

Verwenden Sie es wie folgt:

function onLoaded( data:* ):void
{
    trace( data );
}

var l:EncapsulatedURLLoader = new EncapsulatedURLLoader( "xml/data.xml", onLoaded );
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top