处理数据时,我总是要编写以下内容:
var dataSourceRequest:URLRequest = new URLRequest("/path/file.xml");
var dataSourceLoader:URLLoader = new URLLoader(dataSourceRequest);
dataSourceLoader.addEventListener(Event.COMPLETE, handleDataSource);
虽然我可以理解这两个对象的有用性和事件监听器是分开的,因为它们经常互相合作,我想知道是否有一种方法可以将它们全部组合起来?我能得到的最接近的是这个,但它有点无意义/嵌套:
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);
答案 0 :(得分:4)
将该代码封装到您自己的类中。它可以这么简单:
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 );
答案 1 :(得分:3)
不......这是adobe制作的一个架构决定,也是一个很好的架构决定。两个班级完成不同的工作,做好这些工作。事件监听器允许您多次处理完整事件,因此比此实例中的回调更灵活。
但是,您可以创建一个包含所有功能的类,并以您希望的方式工作!