Просмотр полной версии : Проблемы при подключении flexlib. Какой-то конфликт.
MedvedevA
09.07.2010, 16:05
У меня проект(система администрирования) состоит из большого количества файлов SWF. Есть главный файл SWF-mainmenu.swf, где находится главное меню. При выборе пункта меню в главный файл подгружаются другие флешки.
В одной флешке(monitoringUniversal.swf) нужно было использовать дополнительную библиотеку flexlib. Подключил и откомпилировал. Что бы заработало пришлось подключать и к главной флешке(mainmenu.swf) эту библиотеку, по другому отказывалось работать. После подключения к mainmenu.swf во всех остальных флешках(которые грузятся в нее) перестал правильно работать центрирование вложенных окон(PopUpManager.centerPopUp(this); ).
Структура проекта:
-mainmenu.swf(Чтобы заработал flexlib в monitoringUniversal.swf пришлось подключить flexlib и сюда)
--monitoringUniversal.swf(Тут использовал flexlib)
--p1.swf(перестало корректно работать центрирование вложенных окон)
--p2.swf(перестало корректно работать центрирование вложенных окон)
--p3.swf(перестало корректно работать центрирование вложенных окон)
--p4.swf(перестало корректно работать центрирование вложенных окон)
--p5.swf(перестало корректно работать центрирование вложенных окон)
Вопросы:
1)Что там может конфликтовать и как решить проблему. Может как то пути прописать?
2)Почему в monitoringUniversal.swf не работают компоненты flexlib, до тех пор пока я библиотеку не подключу в mainmenu.swf?
"Только ветер вам на это ответит" (цитата из какой-то песни :) )
в этой библиотеке куча всего, и никто не знает, что именно вы от туда использовали, да и качество этой библиотеки весьма сомнительно даже по сравнению с флексовым фреймворком в целом... Почему так подключается - компилируйте с -link-report и смотрите кто и от чего зависит... дело это не легкое, но вряд ли вам кто-то что-то более внятное посоветует.
MedvedevA
09.07.2010, 16:48
"Только ветер вам на это ответит" (цитата из какой-то песни :) )
в этой библиотеке куча всего, и никто не знает, что именно вы от туда использовали, да и качество этой библиотеки весьма сомнительно даже по сравнению с флексовым фреймворком в целом... Почему так подключается - компилируйте с -link-report и смотрите кто и от чего зависит... дело это не легкое, но вряд ли вам кто-то что-то более внятное посоветует.
Использую только SuperTabBar в monitoringUniversal.swf... Больше вообще ничего и нигде :(
Но почему все таки обязательео нужно подключать библиотеку к главному файлу, хоть она там вообще не используется? :( По другому в подгружаемой флешке отказывается работать(отя там библиотека тоже подключена). Это как то можно обойти, чтобы подключить только к подгружаемой флешке?
Тогда проблема отпадёт сама собой.:(
Но почему все таки обязательео нужно подключать библиотеку к главному файлу, хоть она там вообще не используется?
---->
Почему так подключается - компилируйте с -link-report и смотрите кто и от чего зависит... дело это не легкое, но вряд ли вам кто-то что-то более внятное посоветует.
alexberkut
09.07.2010, 19:26
Вопрос, ты скомпиленную либу как подключаешь?
1. merge into code
2. external library
3. RSL
?
MedvedevA
10.07.2010, 00:06
Вопрос, ты скомпиленную либу как подключаешь?
1. merge into code
2. external library
3. RSL
?
Пробовал merge into code и RSL.
alexberkut
12.07.2010, 11:00
Если ты пробовал merge into code, то у тебя будет проблема в 99% случаев.
Допустим у тебя есть 2 swf и в каждой стоит merge into code. В таком случае один и тот же класс будет вкомпиливаться в каждую swf. Это и преведет потом к ошибке что класс не совпадает сам с собой (на самом деле это 2 инстанса одного класса).
Если же ты в обоих (именно в обоих) случаях используеь RSL то проблем не будет, т.е. классы вообще вкомпиливаться не будут и на рантайме при попытке обратиться к данному классу плеер просто подгрузит RSL по указанному адрессу и поднимит класс.
Если же ты в одной swf укажешь merge into code, а во второй RSL. То проблема опять же будет (см абзац выше).
Ты уверен что ты везде пробовал RSL? И что дебаг говорит? В трейсе есть какие-нибудь ошибки... Они должны быть.
MedvedevA
13.07.2010, 13:28
Если ты пробовал merge into code, то у тебя будет проблема в 99% случаев.
Допустим у тебя есть 2 swf и в каждой стоит merge into code. В таком случае один и тот же класс будет вкомпиливаться в каждую swf. Это и преведет потом к ошибке что класс не совпадает сам с собой (на самом деле это 2 инстанса одного класса).
Если же ты в обоих (именно в обоих) случаях используеь RSL то проблем не будет, т.е. классы вообще вкомпиливаться не будут и на рантайме при попытке обратиться к данному классу плеер просто подгрузит RSL по указанному адрессу и поднимит класс.
Если же ты в одной swf укажешь merge into code, а во второй RSL. То проблема опять же будет (см абзац выше).
Ты уверен что ты везде пробовал RSL? И что дебаг говорит? В трейсе есть какие-нибудь ошибки... Они должны быть.
Пробовал так и так. Ничего не влияет. Критичных Ошибок нету у меня.
Проблема только в том что перестало корретно работать функция PopUpManager.centerPopUp(this); Других проблем вообще нету. Тут большой проект и много вложенных окон. И даже такая мелочь это не очень хорошо. Других проблем кроме не правильной работы centerPopUp во всем большом проекте нету.
Обнаружил такую вещь. Так как определение centerPopUp находится в классе sdks\3.0.0\frameworks\projects\framework\src\mx\managers\PopUpManagerImpl.as вместо библиотеке framework.swc подключил исходники sdks\3.0.0\frameworks\projects\framework\ по методу http://www.brightworks.com/flex_ability/?p=99 И функция centerPopUp нормально заработала вместе с Flexlib.
Как с таким бороться вообще не понимаю. Не успевает что инициализироваться?! Может кто-нибудь зацепку подскажет какую-нибудь?
alexberkut
13.07.2010, 13:32
Судя по тому что ты написал, проблемы с flexlib нет, тк у тебя всё грузить и показывается.
PopUpManager.centerPopUp(this);
this - это что? Это должен быть контейнер относительно которого центрировать.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.