这是问题......我正在开发一个flex应用程序(actionscript)......
我的应用程序中有一个Panel,其中包含2个按钮和3个画布组件,在某些情况下...现在我想将面板的当前状态存储在某个文件或数据库中......之后我想加载它当我回来并运行应用程序时,我的应用程序中的面板再次出现......
因此我尝试使用其readObject()和writeObject()方法将整个面板转换为ByteArray对象...但是当我读取ByteArray并使用addChild()方法在我的应用程序中添加面板时,它不会添加任何内容没有错误或错误...
writeObject创建了我能够打印的ByteArray但是当我把它拿回来并添加孩子时,我无法获得面板,而且它是孩子......
如果有人可以提供帮助......我们将不胜感激......先谢谢...
以下是示例代码...解释我想要做的事情......
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import mx.collections.ArrayCollection;
[Bindable] private var photoFeed:ArrayCollection;
var buffer:ByteArray;
private function init():void{
addEventListener(KeyboardEvent.KEY_DOWN, keyHandler);
searchTerms.setFocus();
buffer = new ByteArray();
}
private function keyHandler(event:KeyboardEvent):void{
if(event.charCode == 13){
myButton.label = "Exit";
try{
buffer.writeObject(myData);
}catch(error:Error){
Alert.show(error.toString(),"Encoding Error");
}
removeChild(myData);
reloadButton.visible = true;
Alert.show("HBox is deleted","Alert");
}
}
private function reloadHBox():void{
Alert.show("Trying to load Hbox","Alert");
try{
buffer.position = 0;
var obj:HBox = buffer.readObject() as HBox;
}catch(error:Error){
Alert.show(error.toString(),"Decoding Error");
}
addChild(obj);
Alert.show("Hbox is reloaded","Alert");
}
]]>
</mx:Script>
<mx:Button id="reloadButton" label="Reload HBox" visible="false" click="reloadHBox()"/>
<mx:HBox width="100%" id="myData">
<mx:Label text="Hi Rashmin here..."/>
<mx:TextInput id="searchTerms" name="searchTerms" text="Hello How are you?"/>
<mx:Button id="myButton" label="Enter"/>
</mx:HBox>
我想重新生成HBox,所以需要一些帮助...
答案 0 :(得分:1)
创意,但我并不感到惊讶它不起作用。你能分享一些代码吗?
那就是说,我只是编写一个算法来保存状态(x,y坐标/高度等等......)并在加载时重置该信息。
答案 1 :(得分:0)
您可以创建一个存储面板位置的对象
private var positions:Object;
positions = { panel1Position: new Point( panel1X , panel1Y)
//etc.... };
设置一些默认值,您的组件将从您的位置对象获取其位置。
private function init():void
{
panel1.x = positions.panel1Position.x;
//etc...
}
要保存您的值,请使用SharedObject
var objectName:String = "Put some identifier here";
var sharedObject:SharedObject = SharedObject.getLocal( objectName , '/' );
sharedObject.data.positions = positions;
要检索您的值,您只需要
var sharedObject = SharedObject.getLocal( "the identifier you've set above" , '/' );
positions = sharedObject.data.positions;
然后,您可以更新您的组件x&amp; y值。无论如何,这是一般的想法,更多信息检查SharedObject类:
http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/
如果您可以使用整数标识每个状态,则可以对面板状态应用相同的原则,将状态整数保存在sharedObject中。