Гибкая сериализация для встроенных компонентов, таких как ... HBox, VBox, Panel, Canvas, DataGrid - PullRequest
0 голосов
/ 14 августа 2010

Вот проблема ... Я работаю над 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 ]

1 голос
/ 14 августа 2010

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

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

0 голосов
/ 14 августа 2010

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

 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.

...