![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: May 2006
Адрес: Moscow
Сообщений: 40
|
Добрый день, столкнулся со следующей проблемой:
есть наследуемый от URLLoader класс: package main
{
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.*;
import main.*;
public class xmlData extends URLLoader
{
public static var iconsList:XML = null;
public function xmlData():void
{
super();
}
public function loadIconsList():void
{
var request:URLRequest = new URLRequest("data/List.xml");
addEventListener("complete",onComplete);
load(request);
}
public function onComplete(event:Event):void
{
iconsList = XML(URLLoader(event.target).data);
trace(URLLoader(event.target));
trace(iconsList);
removeEventListener("complete",onComplete);
}
}
}
из другого файла создаю объект xmlData, вызываю ф-ию loadIconsList(); в output выводит: TypeError: Error #1034: Type Coercion failed: cannot convert flash.net::URLStream@4254461 to flash.net.URLLoader. at main::xmlData/onComplete() |
|
|||||
|
Modus ponens
|
package
{
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.*;
public class XMLData extends URLLoader
{
public var iconsList:XML;
public function XMLData():void
{
super();
addEventListener(Event.COMPLETE, onComplete);
addEventListener(IOErrorEvent.IO_ERROR, onIOError);
}
public function loadIconsList():void
{
var request:URLRequest = new URLRequest("test.xml");
load(request);
}
private function onComplete(event:Event):void
{
iconsList = XML((event.target as URLLoader).data);
trace(event.target is URLLoader);
trace(iconsList);
}
private function onIOError(evt:IOErrorEvent):void
{
trace(evt.text)
}
}
}
У меня все работает в таком виде... Не называйте классы с маленькой буквы, используйте константы вместо их строковых значений. А вообще, ошибка, скорее всего не в этом коде, просто, наверное, классы перепутали, и не тот использовали...
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: May 2006
Адрес: Moscow
Сообщений: 40
|
package main
{
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class Myloader extends URLLoader
{
public function Myloader()
{
super();
addEventListener( Event.COMPLETE, onComplete);
load(new URLRequest("data/list.xml"));
}
public function onComplete(e:Event):void
{
trace(e.target is URLLoader);
trace(data);
}
}
}
Мой код не работает, Flash упорно выводит false и undefined. Ваш код прекрасно работает. Ужас какой-то((( |
|
|||||
|
Modus ponens
|
Ошибка оказалась интересной =) очевидно, у URLLoader есть публичный метод onComplete() т.е. если я делаю его приватным, то все работает, если публичным - такой же результат, как и у вас. Соответсвенно, если меняю название на что-то другое - то тоже работает =)
Т.е. нужно понимать, что схема с евентами построена по принципу АС2 EventDispatcher'a: Т.е. когда мы добавляем функцию в слушателей диспатчер создает у этого объекта дополнительную функцию с именем события, на которое мы подписались, которая и будет вызвана когда случится событие и уже она вызовет подписаную функцию.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: May 2006
Адрес: Moscow
Сообщений: 40
|
действительно, так все работает.Спасибо за помощь! =)
|
![]() |
![]() |
Часовой пояс GMT +4, время: 21:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|