Mate: невозможно установить модель свойства - PullRequest
1 голос
/ 10 ноября 2009

У меня есть приложение с модулями. Каждый модуль полностью автономен. Между ними нет общих событий или чего-либо еще. В каждом модуле есть DataGrid и с ContextMenu. Детали выбранных данных открываются во всплывающем окне. Модули управляются как обычно loalEventMap и presentationModel.

Если я немедленно закрыл всплывающее окно и снова открыл его, все работает нормально. Но если я изменяю некоторые данные во всплывающем окне, закрываю его, выгружаю модуль, загружаю модуль снова и снова открываю всплывающее окно, Mate выдает следующую ошибку:

  • ОШИБКА: невозможно задать модель свойства для CDBInputMask, так как это не тип CDBPresentationModel. Предоставленное значение имело тип CDBPresentationModel
  • TARGET: CDBInputMask
  • TARGET KEY: модель
  • TAG: PropertyInjector
  • ФАЙЛ: CDBLocalEventMap
  • STACK TRACE: ошибка типа: ошибка # 1034: сбой приведения типа: невозможно преобразовать com.mycomp.myMod.ui.presenters :: CDBPresentationModel @ 5d13cf1 в com.mycomp.myMod.ui.presenters.CDBPresentationModel. на com.asfusion.mate.core :: Binder / bind () [/ Users / Nahuel 1 / Documents / Flex Builder 3 / Mate_trunk / src / com / asfusion / mate / core / Binder.as: 90] на com.asfusion.mate.actions :: PropertyInjector / run () [/ Users / Nahuel 1 / Documents / Flex Builder 3 / Mate_trunk / src / com / asfusion / mate / actions / PropertyInjector.as: 205]

Моя реализация:


открыть всплывающее окно:

    inputMask = new CDBInputMask();
    PopUpManager.addPopUp(inputMask,this,true);

закрыть Всплывающее окно:

 PopUpManager.removePopUp(inputMask);

inputMask = null; Инжектор:

 <Injectors target="{CDBInputMask}" debug="true" dispatcherType="global" >

В Mate-Forum я нашел ветку с похожей, но не совсем идентичной проблемой. Здесь модератор имел в виду, что, похоже, он пытается создать экземпляр класса дважды в модуле. В моем случае PopUpManager - это одноэлементный класс. Так что похоже на ту же проблему. Первый раз через все работает нормально, Второй раз через все падает, потому что класс уже введен.

Я попытался использовать отладчик с трассировкой, чтобы посмотреть, как можно очистить всплывающее окно или очистить модуль. Но я не нашел решения. Если вам понадобится дополнительный код, я его опубликую.

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

1 Ответ

1 голос
/ 11 ноября 2009

Похоже, проблемы ApplicationDomain.

Вероятно, что определения классов загружаются несколько раз в разных доменах безопасности. Это вызовет проблемы приведения, несмотря на то, что объекты выглядят так же, как они одного класса. Что касается среды выполнения Flash, они не относятся к одному и тому же типу, если они не находятся в одном домене безопасности.

Чтобы решить эту проблему, предоставьте загрузчику контекст с используемым доменом безопасности вашего основного приложения (при условии, что вы используете класс Loader для загрузки своих модулей):

var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
loader.loader(request, context);
...