![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 78
|
Подскажите, каким способом можно передать параметры обработчик COMPLETE-события для Loader.contentLoaderInfo? Ситуация такая - есть xml-файл. Из него читаю все ноды с картинками и начинаю грузить их каждую Loader-ом. И в обработчике хочу записать полученный битмап под его именем, которое у него в xml-файле.
Код: // on xml file loaded private function onXmlLoadedHandler(e:Event):void { xmlData = new XML(e.target.data); elementsToLoad = xmlData.images.image.length(); for (var image in xmlData.images.image) { var imageNode = xmlData.images.image[image]; var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadElementCompleteHandler ); loader.load(new URLRequest(imageNode.url)); } } private function onLoadElementCompleteHandler(e:Event):void { e.currentTarget.removeEventListener(Event.COMPLETE, onLoadElementCompleteHandler ); uiCache[ name ] = e.currentTarget.content; elementsLoaded++; if (elementsLoaded == elementsToLoad) { var data:Object = { uicache : uiCache }; model.setData(data); } } подскажите, каким способом можно передать name в обработчик? |
|
|||||
|
[+1 10.12.10]
|
Можно вот так извратиться)))
package { import flash.display.Loader; import flash.display.LoaderInfo; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; /** * ... * @author Aleksey Matveev */ public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoadedHandler); loader.load(new URLRequest("http://img.yandex.net/i/www/logo.png?name=myName") ); } private function imageLoadedHandler(e:Event):void { var li:LoaderInfo = e.target as LoaderInfo; var params:Object = li.parameters; for (var name:String in params) { trace(name, params[name]);//name myName } addChild(li.loader); } } } |
|
|||||
|
либо расширяем Loader и добавляем свойство bitmapName например
либо Dictionary package { import flash.display.*; import flash.events.*; import flash.net.*; import flash.utils.*; public class Test extends Sprite{ private var dictionary:Dictionary; public function Test(){ dictionary = new Dictionary(); var loader1:Loader = new Loader(); var loader2:Loader = new Loader(); dictionary[loader1] = "someBitmapName1"; dictionary[loader2] = "someBitmapName2"; loader1.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler); loader1.load(new URLRequest("images/1.jpg")); loader2.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler); loader2.load(new URLRequest("images/2.jpg")); } private function completeHandler(e:Event){ var loader:Loader = (e.target as LoaderInfo).loader as Loader; loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,completeHandler); trace(dictionary[loader]); loader = null; } } }
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 78
|
думаю, придется расширить таки его, потому что часто приходится передавать данные вместе с ним
|
|
|||||
|
Регистрация: Apr 2009
Сообщений: 78
|
как понять по одному? то есть не циклом? а как же тогда?
Последний раз редактировалось imdogma; 08.02.2010 в 11:35. |
|
|||||
|
Цитата:
Код: // on xml file loaded private function onXmlLoadedHandler(e:Event):void { xmlData = new XML(e.target.data); elementsToLoad = xmlData.images.image.length(); for (var image in xmlData.images.image) { var imageNode = xmlData.images.image[image]; var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadElementCompleteHandler ); loader.load(new URLRequest(imageNode.url)); } } private function onLoadElementCompleteHandler(e:Event):void { e.currentTarget.removeEventListener(Event.COMPLETE, onLoadElementCompleteHandler ); var loaderInfo:LoaderInfo = e.target as LoaderInfo; var arr:Array = loaderInfo.url.split("/") trace(arr[arr.length-1]); // имя загруженного файла } |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 78
|
Партизан, спасибо, это тоже вариант. Но все же хотелось бы не имя файла читать (как он записан на диске), а именно из xml нода. К тому же иногда нужно передать не просто имя, например массив с инфой по этому объекту
|
|
|||||
|
Вы бы определились... Расширьте Loader или воспользуйесь схемой предложенной cleptoman.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 04:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|