如果保存/打开对话框适合您,您可以使用FileReference
API。在执行此操作之前,您必须将状态序列化/反序列化到/从String
/ByteArray
/XML
object.
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() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html#browse%28%29, then FileReference.load() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html#load%28%29).
如果您需要在没有任何对话框的情况下保存/恢复应用程序状态,那么您可能应该使用 AIR(或SharedObject
,正如 Raja Jaganathan 所建议的那样)。但情况似乎并非如此,因为您希望用户能够在另一个系统中重新打开图表。为了实现这一点,您应该允许用户将其工作保存到适当的位置,以便稍后他可以将其移动到另一台机器/系统并使用您的应用程序重新打开它。
另一种选择是将所有内容存储在服务器上并向用户提供已保存文件的列表(就像 Cacoo 所做的那样)。如果你这样做,你就必须实现相应的服务器端API。它可能是 REST API 或类似 RTMP 服务器的东西。如果是 REST API,请使用FileReference.upload()
将数据上传到您的服务器,以及URLLoader.load()
来取回它。