Обратный вызов сериализации / десериализации в классах, помеченных как [RemoteClass] - PullRequest
0 голосов
/ 03 июня 2011

Я работал над проектом Flex, который использует объекты значений (VO) для манипулирования данными на стороне клиента. VO заполняются с помощью тега [RemoteClass] перед определением класса.

Структура базы данных была оптимизирована, поэтому в результате появились таблицы с такими полями, как:

optionsName: "1, 2, 3, 4, 5, 6"

В рамках проекта это значение («1, 2, 3, 4, 5, 6») означает динамический набор чисел.

По умолчанию поле класса optionsName заполняется строкой «1, 2, 3, 4, 5, 6» и работает нормально. Но я использую это поле как набор чисел, соответствующий бизнес-логике, и удобнее использовать их как экземпляры Array of Number. В общем, лучшее решение для этого - подписаться на сериализованные / десериализованные события ВО и выполнить дополнительное преобразование.

Вопрос: как этого добиться во Flex / ActionScript?

Я понимаю, что мог бы сделать это, когда результат получен от удаленного объекта, но с моей точки зрения это не очень хорошее решение. Также я знаю о решении с реализацией интерфейса flash.utils.IExternalizable.

Основная идея заключается в том, чтобы заставить Flex вызывать необходимый метод перед сериализацией и после десериализации VO.

Заранее спасибо.

С наилучшими пожеланиями, Виктор Бурдейный

1 Ответ

1 голос
/ 03 июня 2011

Запишите это свойство как установщик, который поддерживает строки и массивы в качестве входных данных и конвертирует на лету.

private var _optionsName:Array;
public function get optionsName():Array { return _optionsName; }
public function set optionsName(newOptionsName:*):void {
    if(newOptionsName is String) {
        _optionsName = newOptionsName.split(", ");
    } else {
        _optionsName = newOptionsName as Array;
    }
}
...