Actionscript:如何处理具有相同类型但具有不同函数侦听器的事件?

Posted

技术标签:

【中文标题】Actionscript:如何处理具有相同类型但具有不同函数侦听器的事件?【英文标题】:Actionscript: How to handle events with same type but with different function listener? 【发布时间】:2012-07-27 21:48:03 【问题描述】:

我正在尝试使用 Actionscript (adobe air) 为 ios 制作示例应用程序。但是我在事件/事件处理方面遇到了问题。我的应用程序基本上让用户可以选择拍照或从相机胶卷中选择一张上传到服务器。如果用户决定拍照,我必须将该照片保存到设备的相机胶卷中。我遇到问题的代码部分如下:

private function readMediaData():void 
    //set up some variables and data

    var file:File = tempDir.resolvePath(filename);
    var stream:FileStream = new FileStream(); 
    stream.open(file, FileMode.WRITE); 
    stream.writeBytes(imageBytes); 
    stream.close();

    file.addEventListener(Event.COMPLETE, uploadComplete, false, 0, true);

    //upload file here


private function uploadComplete(event:Event):void 
    //selectedImage is the MediaPromise
    if (selectedImage.file == null) 
         loader = new Loader();
         loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleted);
         loader.loadFilePromise(selectedImage);
    


private function loaderCompleted(event:Event):void 
    //save image

上传工作正常,但是一旦上传完成,我会在 loaderCompleted 和 uploadComplete 之间出现无限循环,导致多张图片被上传到服务器。一旦文件进入uploadComplete函数,我尝试删除文件的侦听器,但仍然得到相同的结果。我的猜测是,一旦注册了加载程序的事件侦听器,它就会触发一个 Event.COMPLETE 通知,这两个方法(或对象)仍然可以识别。有没有办法正确处理具有相同类型但来自不同对象和不同函数侦听器的事件?

【问题讨论】:

【参考方案1】:

尝试将侦听器设置为流而不是文件:

// Changed the 'file' with 'stream'
stream.addEventListener(Event.COMPLETE, uploadComplete, false, 0, true);

【讨论】:

以上是关于Actionscript:如何处理具有相同类型但具有不同函数侦听器的事件?的主要内容,如果未能解决你的问题,请参考以下文章

python如何处理具有相同名称的模块和包?

branch.io 如何处理多个设备可能具有相同指纹的情况?

如何处理具有相同分辨率但屏幕高度不同的 Android 设备

我们如何处理在表的所有记录中具有相同值的列?

如何处理具有不同值类型的字典

如何处理具有完全不同构建系统的第三方库?