Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как из Object-a сделать идентичный адекватный класс который мне нужен. (http://www.flasher.ru/forum/showthread.php?t=156560)

Dukobpa3 23.05.2011 23:03

Как из Object-a сделать идентичный адекватный класс который мне нужен.
 
Суть в чем. Играюсь с шаредОбжектом. Пытался схалтурить и записать туда весь экземпляр нужного мне класса.
Оно вроде как получилось, но не до конца. Экземпляр записывается, но достается оттудова не с тем типом с которым я его туда записал а с типом Object.

Все параметры сохраняются, и все вложенные стандартные штуки типа Dictionary, Array, и тем более примитивные типы - свои типы сохраняют, а все экземпляры авторских классов возвращаются абстрактно.

Код AS3:

sharedObject.data.myObject[name] as MyObject;// - Выдает null;

Писать какую-то функцию типа:
Код AS3:

function getFromObject(obj:Object, myObject:MyObject):void
{
        for each(var key:String in obj)
        {
                myObject[key] = obj[key]
        }
}

Или может кто-то что-то красивее предложит?
Можно, конечно, прикрутить какую-то аналитику и писать в шаред только несколько нужных параметров. А потом не объект целиком доставать а нужные параметры и всовывать в свой объект.

dimarik 23.05.2011 23:10

registerClassAlias

Dukobpa3 23.05.2011 23:48

Не взлетает, оно видимо на сессию работает, а мне ведь после перезагрузки надо.

Пробовал делать перед извлечением объекта из шареда - не работает.
потом перенес перед тем местом где записываю - результат тот же.
потом плюс предыдущему пункту для проверки добавил getClassByAlias() в том месте где извлекаю - говорит не могу найти такой класс ибо не зарегистрирован.

ЧЯДНТ?

Добавлено через 8 минут
так записываю
Код AS3:

                        if (_storeToSO = storeToSharedObject) 
                        {
                                if (!sharedObject) sharedObject = SharedObject.getLocal("/loading", "/");
 
                                registerClassAlias("com.loading.BulkLoader", BulkLoader);
 
                                if (!sharedObject.data.isPrototypeOf("loaders"))
                                {
                                        sharedObject.data.loaders = new Object();
                                }
 
                                sharedObject.data.loaders[name] = this as BulkLoader;
                        }

так достаю.
Код AS3:

                        if (sharedObject.data.hasOwnProperty("loaders") && sharedObject.data.loaders.hasOwnProperty(name))
                        {
                                trace("trying to return loader from So");
                                try
                                {
                                        registerClassAlias("com.loading.BulkLoader", BulkLoader);
                                        getClassByAlias("com.loading.BulkLoader")
                                }
                                catch (e:Error)
                                {
                                        trace(e.errorID, e.name, e.message)
                                }
                                return sharedObject.data.loaders[name] as BulkLoader;                               
                        }

Добавлено через 30 минут
эммммм, или его перед записью сериализовать надо? :) щас попробую:)

Добавлено через 11 часов 18 минут
Короче в итоге проще оказалось пересмотреть логику:) Ну и использовал мой любимый метод программирования: "удалить ненужный код".


Часовой пояс GMT +4, время: 06:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.