многоверсионные пути ресурсов подприложений в flex 4

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

У нас есть отдельное веб-приложение, которое использует SDK 4.1 и ищет в своей папке относительных ресурсов все загружаемые изображения и внешние swf-файлы.

на сервере это абсолютный путь к каталогу ресурсов:

/ApplicationRoot/versionFldr/controls/assets/*

приложение использует относительные пути во всех случаях загрузки ресурса... и это постоянно добавляется и обновляется по мере продвижения версий приложения.

Итак, по сути, приложение ищет:

assets/*

Теперь перейдем к НОВОМУ приложению, назовем его «ParentApp», а вышеуказанное приложение — «ChildApp».

Родительское приложение находится в другом каталоге сервера, чем ChildApp

/ParentApp/version/controls/ParentApp.swf
/ChildApp/version/controls/ChildApp.swf

теперь, когда ChildApp загружается в ParentApp, предполагается, что он находится в том же каталоге, в котором он всегда находился. Таким образом, он ищет assets/* и не может их найти, потому что

/ParentApp/version/controls/assets/* != /ChildApp/version/controls/assets/*

Мне нужно найти решение, чтобы ChildApp просматривал абсолютный путь для ВСЕХ загруженных ресурсов, когда он является дочерним элементом ParentApp, и чтобы он просматривал пути относительно себя, когда он является автономным.

У меня есть предостережения: изображения загружаются в различные элементы управления, кэши и даже в поля mx:Text (html-текст с тегами). Я пытаюсь избежать глобальной замены всех ссылок пути в приложении и создания новых процедур кодирования при создании новых активов для приложения. ChildApp находится в производстве и должен оставаться в SDK 4.1.

ParentApp является новым и обладает гораздо большей гибкостью.

Я пробовал параметры компилятора -source-path и -library-path в childApp, но это привело к ошибкам компиляции, и я не смог продолжить.

Заранее благодарю за любую информацию и помощь! -ЭЙ


person notDefault    schedule 08.08.2012    source источник


Ответы (1)


Я бы решил это, указав переменную baseURL в дочернем приложении. Присвойте ему значение по умолчанию, чтобы вы могли формировать обычные относительные URL-адреса, которые вы используете: `var baseURL:String = "/assets/";

К сожалению, тогда вам придется изменить путь к каждому ресурсу в дочернем приложении, чтобы путь к ресурсам выглядел примерно так: baseURL + assetFileName

Когда дочернее приложение загружается в родительское приложение, вы указываете этой переменной baseURL неотносительный путь. В идеале вы делаете это в начале процесса, прежде чем дочернее приложение попытается загрузить какие-либо активы.

person Sunil D.    schedule 08.08.2012
comment
Я сделал это на самом деле, чтобы обрабатывать загрузку модуля, и он отлично работает. Я передаю значение версии из ParentApp в ChildApp через flashVars, и после инициализации ChildApp оно использует это для построения абсолютного пути для правильной загрузки модулей. проблема, с которой я столкнулся при использовании этой переменной, заключается в том, что количество активов и неизвестных активов, к которым это должно быть префиксом. У нас довольно динамичный контент в ChildApp, и МНОГИЕ пользователи, даже не работающие в нашем офисе разработки, имеют доступ к изменению контента. Если содержимое включает относительный путь, я получаю сообщение об ошибке ввода-вывода. - person notDefault; 08.08.2012
comment
РЕШЕНО: мы создали символическую ссылку на сервере в папке assets/ ParentApp, чтобы указать на папку assets/ ChildApp. - person notDefault; 10.08.2012