Константин Ковалев предложил более простой и изящный вариант решения проблемы затронутой мною в предыдущем посте.
Суть решения заключается в использовании метатега RemoteClass в классе сохраняемого объекта. Т.е registerClassAlias не требуется. Код ниже:
XML:
<mx:Application | |
creationComplete="onCreationComplete()" | |
xmlns:mx="http://www.adobe.com/2006/mxml" | |
layout="vertical"> | |
<mx:Script> | |
<![CDATA[ | |
import com.riapriority.tests.DataObject; | |
| |
private var so:SharedObject; | |
private var dataObject:DataObject; | |
| |
| |
private function onCreationComplete(): void | |
{ | |
dataObject = new DataObject(); | |
so = SharedObject.getLocal ("test"); | |
} | |
| |
| |
private function dataObjectGeneration (): void | |
{ | |
dataObject.generate(); | |
ta.text += 'GENERATING: ' + dataObject.toString() + '\n'; | |
} | |
| |
private function saveLocalData(): void | |
{ | |
so.data.DataObject = dataObject; | |
so.flush(); | |
ta.text += 'SAVE: ' + dataObject.toString() + '\n'; | |
} | |
| |
private function loadLocalData(): void | |
{ | |
so = SharedObject.getLocal('test'); | |
if(so.data.DataObject != null) | |
{ | |
dataObject = so.data.DataObject as DataObject; | |
ta.text += 'LOAD: ' + dataObject.toString() + '\n'; | |
} | |
else | |
{ | |
ta.text += 'LOAD: null\n'; | |
} | |
} | |
]]> | |
</mx:Script> | |
| |
<mx:Button | |
label="Generate" | |
click="{dataObjectGeneration()}"/> | |
<mx:Button | |
label="Save" | |
click="{saveLocalData()}"/> | |
<mx:Button | |
label="Load" | |
click="{loadLocalData()}"/> | |
<mx:TextArea | |
width="50%" | |
height="50%" | |
id="ta"/> | |
</mx:Application> |
и код класса
- package com.riapriority.tests
- {
- import mx.formatters.DateFormatter;
- [Bindable]
- [RemoteClass(alias="com.riapriority.tests.DataObject")]
- public class DataObject
- {
- public var date: Date;
- public var random: String;
- public function generate(): void
- {
- date = new Date();
- random = "" + Math.random() * 10000;
- }
- public function toString():String
- {
- var df:DateFormatter = new DateFormatter ();
- df.formatString = "JJ:NN:SS DD/MM/YYYY";
- return "\n date: " + df.format(date) + "\n random: " + random;
- }
- }
- }
[Bindable] здесь не обязателен, но как тонко выразился Константин,
класс без [Bindable], что штопор без бутылки ![]()
Upd: Работает только с публичными свойствами (касается так же вложенных объектов). Вложенные объекты так же должны быть снабжены метатегом RemoteClass.
5 комментариев
Комментарий от: Pashik [Посетитель] · http://www.officehomefurniture.com/
Anya spasibo za primer!
2008-03-29 @ 07:32
Комментарий от: noron [Посетитель] · http://kameshki.info/
дА! так намного лучше и удобнее! Спасибо огромное1
2008-05-30 @ 15:35
Внесу свою лепту[RemoteClass(alias="")]
предназначается для mapping remote классов. При этом в качестве alias указывается полное имя java класса, на который мепиться исходный as3 класс.
Хотя технически он делает тоже, что и registerClassAlias.
2008-07-06 @ 14:05
>Автору спасибо ха инфу, вовремя попалась!не за что
>А че сблогом?
да все нормально с блогом. со мной проблемы. обнаглела. обленилась.
2008-08-06 @ 23:17
Комментарий от: hevac [Посетитель] · http://ru-mitsubishi.ru/
Лень двигатель прогресса!!!
2008-09-01 @ 11:30
