Гибкая сериализация для встроенных компонентов, таких как...HBox, VBox, Panel, Canvas, DataGrid

Вот в чем проблема... Я работаю над Flex-приложением (actionscript)...

У меня есть приложение в моем приложении, которое содержит 2 кнопки и 3 компонента холста при определенных возможностях... теперь я хочу сохранить текущее состояние панели в некотором файле или базе данных... и после этого я хочу снова загрузить ту же панель в мое приложение, когда я возвращаюсь и запускаю приложение...

поэтому я попытался преобразовать всю панель в объект ByteArray, используя методы readObject() и writeObject()... но когда я прочитал 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, поэтому нужна помощь...

2 ответа

Творческая идея, но я не удивлен, что это не работает. Можете поделиться кодом?

Тем не менее, я бы просто написал алгоритм для сохранения состояния (координаты x, y / ширина по высоте и т. Д.) И сбрасывал эту информацию при загрузке.

Вы можете создать объект, который хранит положение вашей панели

 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 & y. В любом случае, это общая идея, для получения дополнительной информации проверьте класс SharedObject:

http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/

Вы можете применить тот же принцип к состояниям панели, если вы можете, например, идентифицировать каждое состояние целым числом, сохраните целое число состояния в вашем sharedObject.

Другие вопросы по тегам