Модель события - это всего лишь кучка обратных вызовов, связанных с типами событий (строк). EventDispatcher
поддерживает эту связь и выполняет итерации по обратным вызовам, когда определенное событие запускается им.
Это довольно тривиально, чтобы воссоздать себя, и в этом случае вы можете значительно упростить его.
Вот пример того, что может быть в AS2 простой EventDispatcher
:
function EventDispatcher():Object
{
var listeners:Object = { };
return {
addEventListener: function(type:String, callback:Function)
{
listeners[type] = callback;
},
dispatchEvent: function(type:String)
{
for(var i:String in listeners)
{
if(i === type) listeners[i]();
}
}
};
}
И его реализация:
// Create the event dispatcher.
var eventDispatcher:Object = EventDispatcher();
// Add an event listener as with AS3.
eventDispatcher.addEventListener("ending", endGame);
// Define the handler function.
function endGame():Void
{
trace("Game has ended.");
}
// Dispatch an event.
eventDispatcher.dispatchEvent("ending");
Если вы хотите, чтобы приблизить его к модели AS3 событий, вам нужно для создания объекта «Событие» в цикле dispatchEvent
и передать его обработчику примерно так:
dispatchEvent: function(type)
{
for(var i:String in listeners)
{
var event:Object = { type: i, target: this };
if(i === type) listeners[i](event);
}
}
http://stackoverflow.com/questions/877871/can-an-as2-swf-be-loaded-into-an-as3-swf-how-can-i-add-this-to-the-stage-and -в – Pier