|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Управление ходом иницализации Application
добрый день
в общем, проблема такая: есть flex-приложение, ресурсы хранятся отдельно. в зависимости от локали с помощью resourceManager.loadResourceModule грузится тот или иной ресурс. дак вот проблема в том, что Application успевает проинициализироваться до того как догрузятся ресурсы, следовательно все надписи и рисунки не отображаются пока не догрузится файл ресурсов. дак вот, можно ли как-то управлять ходом инициализации приложения, чтобы прелоадер отображался вплоть до завершения загрузки ресурсов? если нельзя, то может есть какие-то другие предложения?
__________________
я могу стать всем, если только захочу |
|
|||||
Регистрация: Oct 2010
Сообщений: 67
|
я сделал следующим образом, у меня при инициализации запускается и загружается множество всего, и функции, и картинки и xml
public var array_functions:ArrayCollection = new ArrayCollection(); array_functions.addItem({call_function:setUserMy, call_info:'Загрузка личной информации'}); _progBar.setProgress(call_i+1, array_functions.length); _progBar.label = array_functions[call_i].call_info; call_i++; var timerFunctions:Timer = new Timer(1000, array_functions.length); timerFunctions.addEventListener(TimerEvent.TIMER, call_func); timerFunctions.start(); а если вам нужно имеено ожидание от загрузки фото например то вот таким способом можно // функция загрузки фото public function loadPhoto(Img:Image, path:String):void { var context:LoaderContext = new LoaderContext(); context.checkPolicyFile = true; // Заставляем проверить политику var avaloader:Loader = new Loader();// новый загрузчик авы var avarequest:URLRequest = new URLRequest(); //новый Url запрос для получения аватарки avarequest.url = path; //присваеваем URL адресу ссылку на аватар пользователя avaloader.contentLoaderInfo.addEventListener(Event.COMPLETE, function ():void { Img.source = avaloader; } ); //добавляем слушителя когда загрузиться аватарка avaloader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function ():void { //loadPhoto(Img, path); Img.source = noavatarClass; } ); avaloader.load(avarequest, context); //начинаем грузить аватарку } |
|
|||||
Цитата:
в общем, пара часов ковыряния исходников flex привели к следующим результатам: инициализация компонента происходит в методе initialize (в классе UIComponent). по-сути, можно попробовать его переопределить, но создавая приложение в mxml разметке, этот метод уже переопределяется, так-что нам его уже не переопределить (точнее можно, но нужно наследоваться в обычном as файле). также замечаем, что есть свойство initialized, которое становится true, когда компонент уже проинициализирован. так может нам вручную проставить его в false. но так тоже делать нельзя, так как управлением этого свойства занимается LayoutManage. идем в его исходники и замечаем, что устаановка этого свойства происходит на основании значения свойства processedDescriptors. причем попутно замечаем, что это свойство как раз меняется после выполнения инициализации посредством вызова метода initializationComplete. вот оно! его то мы и переопределим. в итоге получаем следующее: ... public var resourcesInitialized:Boolean; private function preinitializeHandler():void { resourcesInitialized = false; //грузим ресурс var eventDispatcher:IEventDispatcher = resourceManager.loadResourceModule("resources.swf"); eventDispatcher.addEventListener(ResourceEvent.COMPLETE, completeHandler); } override protected function initializationComplete():void { if (!resourcesInitialized) { processedDescriptors = false; } else { processedDescriptors = true; } } private function completeHandler(event:ResourceEvent) : void { resourceManager.localeChain = ["ru_RU"]; resourcesInitialized = true; initializationComplete(); } UPD: кстати данное управление инициализацией возможно и в других компонентах (что кстати и сделано в некоторых стандартных)
__________________
я могу стать всем, если только захочу Последний раз редактировалось Felicast; 14.12.2010 в 12:15. |
|
|||||
В принципе есть еще варианты:
1. Загрузить модуль в прелоадере, что бы он попал в кэш. Это ускорит повторную загрузку. 2. Загрузить модуль в прелоадере, и скормить в resourceManager уже загруженный. |
|
|||||
Цитата:
Цитата:
__________________
я могу стать всем, если только захочу |
Часовой пояс GMT +4, время: 18:14. |
|
« Предыдущая тема | Следующая тема » |
Теги |
application , flex , preloader , resourceManager |
|
|