Объединение URLRequest, URLLoader и Complete Listener событий в Actionscript 3.0? - PullRequest
2 голосов
/ 27 февраля 2010

при обработке данных я всегда должен написать следующее:

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

Хотя я могу понять, насколько полезны эти 2 объекта и слушатель событий, потому что они часто работают друг с другом, я хотел бы знать, есть ли метод, который объединит их все? самое близкое, что я могу получить это, но это немного бессмысленно / вложенность:

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

то, что я действительно хотел бы, это то, что автоматически объединит URLRequest, URLLoader и обработчик завершенных событий, например:

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

Ответы [ 2 ]

4 голосов
/ 02 марта 2010

Инкапсулируйте этот код в свой собственный класс. Это может быть так просто:

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 );
        }
    }
}

Используйте это так:

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

var l:EncapsulatedURLLoader = new EncapsulatedURLLoader( "xml/data.xml", onLoaded );
3 голосов
/ 27 февраля 2010

Нет ... это архитектурное решение, принятое Adobe, и хорошее в этом. Два двух класса выполняют очень разные работы и выполняют их хорошо. Слушатель событий позволяет вам обрабатывать полное событие несколько раз, и поэтому в этом случае он гораздо более гибкий, чем обратный вызов.

Однако вы можете создать класс, который обернет всю эту функциональность и будет работать так, как вы этого хотите!

...