sup*_*upo 6 apache-flex actionscript deep-copy actionscript-3 filereference
在我的项目中,我让用户使用FileReference类选择图片.然后我使用load()函数将这些图片加载到他们的.data属性中.在此之后,我执行一些本地操作并将它们发送到服务器.
我想做的是,能够再次遍历挑选的FileReferences,将它们加载到.data属性中,执行不同的操作并再次将它们发送到服务器.我知道我应该可以从用户调用的事件中执行此操作,这不是问题.
问题是,一旦第一次加载FileReference,我无法以任何方式卸载它,并且我无法保存内存中所有图片的数据,因为这些是巨大的.
所以我想我只能做一件事,就是在FileReference上执行DeepCopy ......然后我可以加载第一个版本,废弃它并使用副本进行第二次"运行".
我试图使用ObjectUtil.copy,但是当我访问副本的例如.name属性时,它失败了:
Error #2037: Functions called in incorrect sequence, or earlier call was unsuccessful.
Run Code Online (Sandbox Code Playgroud)
在flash.net::FileReference/get name()
相关片段:
registerClassAlias("FileReference",FileReference);
masterFileList.addItem(FileReference(ObjectUtil.copy(fr_load.fileList[i])));
trace(masterFileList[i].name)
Run Code Online (Sandbox Code Playgroud)
是否有一些FileReference类的受保护属性阻止它被复制?如果是这样,我可以以某种方式回避这个问题吗?或者我的整体问题还有其他解决方案吗?
我很欣赏任何提示/想法!
我试图做几乎完全符合你正在做的事情,在阅读了一些答案后我几乎放弃了,但我想我找到了一种方法来做到这一点。我发现,如果您有一个 FileReference 对象并load()
多次调用,它会起作用,但主要问题是您在第一次加载后将高分辨率字节保留在内存中。正如您所提到的,对于不了解图像处理的人来说,这是一个很大的禁忌。
解决这个问题的方法是,在第一个之后load()
,您需要调用cancel()
FileReference 上的方法。从我到目前为止的测试来看,这似乎会清除 FileReference 中的字节,并且load()
如果稍后再次调用它,它仍然可以工作。请注意,这不是 API 中明确定义的行为,因此它肯定会发生变化,但它可能会帮助您同时到达您需要去的地方。
希望有帮助。
归档时间: |
|
查看次数: |
2060 次 |
最近记录: |