2011-12-12 42 views
0

将对象传递给加载器的事件处理器的推荐方式是什么?Actionscript:如何将对象传递给加载器事件

 var l:Loader = new Loader(); 
     var o:Object = new Object(); 
     l.tag = o; // i imagine something like this 
     l.contentLoaderInfo.addEventListener(Event.COMPLETE, splashCompleted); 
     l.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, splashIoerror);   
     l.load(new URLRequest(path)); 


     function splashCompleted(e:Event):void 
     { 
      // here i want to access the object o 
     } 

回答

2

为什么你需要做的是什么?如果有许多加载器,并且想要将某些数据与每个加载器相关联,则最好编写子类或包装类来存储数据。例如,让我们考虑的子类:

public class TaggedLoader extends Loader 
{ 
    public var tag:Object; 
} 

使用TaggedLoader代替Loader您可以轻松地访问与加载的对象关联的数据:

var l:Loader = new TaggedLoader(); 
var o:Object = new Object(); 

l.tag = o; 
l.contentLoaderInfo.addEventListener(Event.COMPLETE, splashCompleted); 
l.load(new URLRequest(path)); 

function splashCompleted(e:Event):void 
{ 
    var taggedLoader:TaggedLoader = (e.currentTarget as LoaderInfo).loader as TaggedLoader; 
    var tag:Object = taggedLoader.tag; 
} 

此外,也可以使用地图(ObjectDictionary)但地图在性能方面更差。

+0

谢谢,我只是想,AS已经内置了像C#等其他语言一样的内置方式。 – clamp

0

您可以使用此事件处理程序中访问Loader

(e.currentTarget as LoaderInfo).loader 
+0

是的,但我无法设置.tag成员。或者我可以吗? – clamp

+0

你为什么要手动设置? – weltraumpirat