在 flex builder 4.5 中,我正在做一个类似 cacoo 的项目.
我要保存 diagrams(display object,ui components,text)
在将应用程序关闭到某个地方之前,我可以在应用程序再次打开之后访问。
更清楚:-如果用户在此项目上编辑一些 uml 图并保存它以供稍后编辑并关闭应用程序。几天后他/她想要编辑以前保存的图。强> 现在我如何保存此图以供将来编辑。
最佳答案
如果保存/打开对话框适合您,您可以使用 FileReference
API。在执行此操作之前,您必须将状态序列化/反序列化为 String
/ByteArray
/XML
对象。
private var fileReference:FileReference;
// due to security restrictions, this method must be called from an
// event handler that responds to a user event (mouse click or key
// press), otherwise it will fail.
private function saveState(serializedState:*, fileName:String):void {
fileReference = new FileReference();
fileReference.addEventListener(Event.COMPLETE, onSaved);
fileReference.addEventListener(IOErrorEvent.IO_ERROR, onSavingError);
try {
fileReference.save(serializedState, fileName); // will open save dialog
} catch (e:Error) {
trace("error saving data: " + e.toString());
freeListeners();
}
}
private function onSaved(e:Event):void {
trace("saved!");
freeListeners();
}
private function onSavingError(e:ErrorEvent):void {
trace("error saving data: " + e.toString());
freeListeners();
}
private function freeListeners():void {
fileReference.removeEventListener(Event.COMPLETE, onSaved);
fileReference.removeEventListener(IOErrorEvent.IO_ERROR, onSavingError);
}
与恢复状态类似(使用 FileReference.browse()
,然后是 FileReference.load()
)。
如果您需要在没有任何对话框的情况下保存/恢复应用程序状态,那么您应该使用 AIR(或 SharedObject
,如 Raja Jaganathan 所建议的)。但似乎并非如此,因为您希望用户能够在另一个系统中重新打开图表。为此,您应该允许用户将他的工作保存到适当的位置,以便他以后可以将其移动到另一台机器/系统并使用您的应用程序重新打开它。
另一种选择是将所有内容存储在服务器上并为用户提供已保存文件的列表(就像 Cacoo 所做的那样)。如果采用这种方式,则必须实现相应的服务器端 API。它可能是 REST API 或类似 RTMP 服务器的东西。对于 REST API,使用 FileReference.upload()
将数据上传到您的服务器,然后使用 URLLoader.load()
获取数据。
关于actionscript-3 - 将应用程序状态保存在磁盘或某些地方,以便用户以后访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14135313/