Flex 3.2 проблема приведения - PullRequest
3 голосов
/ 20 мая 2009

Я новичок в сгибании и недавно попал в ловушку.

это код, который я использую.

/**
* return background definition depending on time
*/ 
private function findBackgroundItem( relativeTime : Number ) : CSBackgroundItem
{
    if( this.backgroundItems == null ) return null;
    var result :CSBackgroundItem = null;
    var relative:Date = new Date(relativeTime);
    for( var i : Number = 0; i < this.backgroundItems.length; i++ )
    {
        // backgroundItems is an Ilist of CSBackgroundItem.
        var colourItem : CSBackgroundItem = CSBackgroundItem( this.backgroundItems.getItemAt( i ) );

        // other stuff here
    }           
    return result;
}

Проблема возникает, когда результат IList.getItemsAt () приводится к переменной CSBackgroundItem colourItem. Выдается следующая ошибка

TypeError: Error #1034: Type Coercion failed: cannot convert com.mystuff::CSBackgroundItem@650e8dd1 to com.mystuff.CSBackgroundItem.

Если я использую ключевое слово 'as', я получаю результаты приведения в значение colourItem, равное нулю. Использование отладчика показывает, что список не пуст и действительно заполнен CSBackgroundItem объектами.

Теперь это дурацкий бит ... этот код работает, когда модуль загружается в первый раз ... последующие загрузки (после его выгрузки) выдают исключение.

Может кто-нибудь пролить свет на то, почему это может произойти?

Ответы [ 3 ]

1 голос
/ 20 мая 2009

Да .. это работает ..

вот исправление, которое я использовал в стиле MXML ..

<mx:ModuleLoader id="loader" x="10" y="10" width="100%" height="100%" applicationDomain="{ApplicationDomain.currentDomain}"/>

Эквивалентный ActionScript будет

loader.applicationDomain = ApplicationDomain.currentDomain;
1 голос
/ 20 мая 2009

FYI, тип, загруженный в дочерний домен ApplicationDomain, может быть приведен к типу (который он расширяет / реализует) в родительском ApplicationDomain.

Например.

loader.applicationDomain = ApplicationDomain.currentDomain; // parent domain
loader.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); // child domain
loader.applicationDomain = new ApplicationDomain(); // new domain
1 голос
/ 20 мая 2009

Я думаю, что, возможно, нашел ответ ..

Полагаю, модуль загружается в другом домене приложения. Это означает, что вы не можете выполнять приведение типов этого типа в текущем домене.

Как я понимаю, это смутно похоже на разные загрузчики классов Java, загружающие один и тот же класс.

Я отправлю еще раз, как только я подтвердил это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...