![]() |
PopupManager помогите решить проблему
Недавно столкнулся с проблемой: В приложении есть окно с контролами. Фактически, оно является дочерним элементом контейнера Application. В этом окне при нажатии на кнопку пытаюсь вызвать модальный popup-диалог с помощью PopUpManager. Выдает следующую ошибку:
Код:
[Fault] exception, information=ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта.http://www.flasher.ru/forum/picture....&pictureid=325 Есть ли у кого мысли по этому поводу? Всю голову сломал ;) |
Желательно хотя бы минимум кода. Одно окно вызывается из другого окна?
|
Код AS3:
|
Так ошибка в этой строке var displayObject:IFlexDisplayObject =PopUpManager.createPopUp(this, GalleryWizard, true); ? В каком именно параметре?
Можно попробовать вместо parent использовать FlexGlobals.topLevelAplication |
В том-то и дело, что ни в каком параметре ошибки нет! Ошибка возникает раньше. Опишу по шагам:
1) Ставлю breakpoint отладчика на строку вызова popup. 2) Запускаю приложение и дебаг не доходит до обработчика события CLICK и тем более до вызова PopUpManager. 3) Если закомментировать весь код с PopUpManager, то все начинает работать без ошибок |
Цитата:
Цитата:
Стек полностью приведите. Посмотрите что приходит в качестве target в mouseEventHandler в SystemManager или в mouseDownHandler в ActiveWindowManager. |
Цитата:
Цитата:
|
Вложений: 1
alatar, по target: Действительно, отрабатывается событие 'MOUSE_DOWN' в ActiveWindowManager. В качестве target там присутствует контрол, на котором нажата кнопка мыши. Естественно, target меняется в зависимости от того, на что нажали.
В качестве currentTarget там выступает экземпляр SystemManager с классом документа (главный mxml) в качестве child. Скриншот стека во вложении. Теряюсь в догадках в чем может быть проблема. Я просто не могу понять сути - откуда ошибка? В чем разница между адобовским примером и моим приложением? |
Цитата:
|
Цитата:
|
Ох уж этот FlashDevelop. Из флеш плеера скопируйте.
|
Код:
ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта. |
насколько я понимаю у вас не соответствие родителя с наследником. По простому вы вызываете mc.getChildIndex(spr) где spr не относиться к mc.
|
AlexCooper, спасибо, кэп ;) Только вот я ничего нигде не вызываю! До этого не доходит, перед CLICK срабатывает MOUSE_DOWN. Инициализация листнера, видимо, происходит при инициализации статического класса PopUpManager. По идее, я вообще не должен заморачиваться на внутренней реализации этого класса, ибо это часть Flex framework. Но приходится ;)
|
Кэп всегда на стрёме))
|
Код вашего Application с кнопками привести можете? Или минимальный пример в котором воспроизводится это поведение.
|
Небольшую зацепку нашел: у меня в основном mxml после инициализации создается объект MainWindow (потомок Application), который затем добавляется методом addElement к основному application. Уже в экземпляре MainWindow я пытаюсь вызывать PopUpManager.addPopUp и это дает ошибку (по-прежнему непонятно почему). Если я делаю тот же вызов PopUpManager.addPopUp в главном mxml, то всё работает нормально. Буду признателен, если у кого-нибудь есть мысли по этому поводу. Пока что перемещу всё в основной mxml и буду оттуда вызывать popup-ы.
|
А у вас spark или mx? Просто везде в трейсах вижу мх, а используете addElement, который вроде как спарка.
|
GBee, в spark используется mx-овский PopUpManager: http://help.adobe.com/en_US/flex/usi...0dcf-8000.html (см. пример ниже по тексту страницы)
|
А вы так и не ответили.
Да я так размышляю. Вы добавляете с помощью addElement. А валится на getChildIndex(), хотя по идее должен использовать getElementIndex(). То есть какая-то запутка все-таки есть, поэтому я и спрашиваю у вас Аппликейшен мх или спарк? И, по идее, указание FlexGlobals.topApplication в качестве парента должно помочь в таком случае. |
Цитата:
Добавлено через 6 минут Цитата:
|
Мой аппликейшн - спарк. Указывать FlexGlobals.topApplication уже пробовал - без изменений.
Добавлено через 3 минуты Цитата:
|
Цитата:
Цитата:
Цитата:
|
2 alatar, Всё, я просветлился, спасибо! Выходило вот что: я создавал внутри Application другой Application и в этом была проблема. Изменил у внутреннего (динамически создаваемого окна) mxml тэги <Application> на <Group> и всё заработало! Всем спасибо!
|
| Часовой пояс GMT +4, время: 07:30. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.