PDA

Просмотр полной версии : Передача переменных между классами. Снова dispatchEvent


Stas52
05.03.2011, 15:09
Есть 2 класса.

Из первого класса вызываю второй, который загружает XML файл. Как мне из второго класса полученный XML предать обратно в первый класс.

Только, пожалуйста, не отправляйте меня в поиск по форуму. Я там был уже много раз. Но находил только большие куски непонятного кода. Что-то не верится, что та функциональность, которая должна работать как функция Return, теперь состоит из 30 строк.

Если можно, напишите, пожалуйста, кусочек понятного кода, или дайте прямую ссылку на похожий пример.

Спасибо!


package src {

import flash.display.*;
import flash.text.*;
import flash.net.*;
import flash.events.*;
import flash.display.MovieClip;
import flash.xml.*;

import src.Loaders.*;

public class Setup extends Sprite {

public function Setup(){
var load_world_data = new LoadXML('photos.xml');
load_world_data.addEventListener(Event.COMPLETE, completeCreateGeneralArray);
}


private function completeCreateGeneralArray(e:Event):void {
trace('XML Data:');
}

}
}





package src.Loaders {

import flash.net.*;
import flash.events.*;
import flash.utils.*;
import flash.display.*;

public class LoadXML extends EventDispatcher {

public function LoadXML(xml_filenale:String){

var loader:URLLoader = new URLLoader();
loader.addEventListener( Event.COMPLETE, handleComplete );
loader.load( new URLRequest(xml_filenale) );

}

private function handleComplete(event:Event) {
var general_xml = new XML(event.target.data);
dispatchEvent(new Event(Event.COMPLETE));
}


}
}

cleptoman
05.03.2011, 15:20
package src.Loaders {

import flash.net.*;
import flash.events.*;
import flash.utils.*;
import flash.display.*;

public class LoadXML extends EventDispatcher {

private var _data:Object;

public function LoadXML(xml_filenale:String){

var loader:URLLoader = new URLLoader();
loader.addEventListener( Event.COMPLETE, handleComplete );
loader.load( new URLRequest(xml_filenale) );

}

private function handleComplete(event:Event) {
_data = event.target.data;
dispatchEvent(e);
}

public function get data():Object { return _data; }


}
}
private function completeCreateGeneralArray(e:Event):void {
trace((e.target as LoadXML).data);
}
только зачем вам масло масляное?..делать обертку над лоадером ради того, чтоб не писать лишнюю строчку с load ? )

Stas52
05.03.2011, 15:34
Да я понимаю, что это того не стоит. Просто хочу разобраться с целью обучения.

Единственное, там небольшая опечатка. Надо писать dispatchEvent(event);

Огромное спасибо!

cleptoman
05.03.2011, 15:43
можете еще расширить Event метод, засунуть туда дату и его отдиспатчить и ловить дату не в экземпляре LoadXML, а в самом ивенте.