![]() |
|
||||||||||
|
|||||
|
UFO
Регистрация: Jul 2007
Сообщений: 173
|
Надо чтобы гуру форума заценили для начала ) Класс ведь реально весьма полезный и многим пригодится.
На всякий случай добавлю сюда код, т.к. в жж он побился. Вот некоторые возможности: - прозрачная генерация и получение событий ( JS <-> AS, AS <-> AS, JS <-> JS ); - возможность использовать флешку чисто, как обсервер для JS; - возможность рассылать события бродкастом, т.е. нам все равно где находится подписчик какая у него глубина вложенности и т.д.; - не имеет значения, где находится подписчик во флеш или в JS и не важно кто сгенерит событие. - есть событие __all__, при подписке к которому подписчик будет слышать вообще все евенты. package
{
import flash.external.*;
public class EManager extends Object
{
private var externalHandlers = [];
static private var _inst:EManager;
static public function get inst ()
{
if ( !_inst ) _inst = new EManager ();
return _inst;
}
public function EEventDispatcher ():void
{
ExternalInterface.addCallback ( "subscribe", subscribe );
ExternalInterface.addCallback ( "unsubscribe", unsubscribe );
ExternalInterface.addCallback ( "notify", notify );
}
public function subscribe ( event:String, handler ):void
{
if ( !( event in externalHandlers ) ) externalHandlers [ event ] = [];
externalHandlers [ event ].push ( handler );
}
public function unsubscribe ( event:String, handler ):void
{
var handlers:Array = externalHandlers [ event ];
if ( handlers )
for ( var i:uint = 0, len = handlers.length; i < len; i++ )
if ( handlers [ i ] == handler )
{
handlers.splice ( i, 1 );
break;
}
}
public function notify ( event:String, params:Object = null ):void
{
var handlers:Array = ( ( externalHandlers [ event ] || [] ) as Array ).concat ( ( externalHandlers [ '__all__' ] || [] ) as Array );
for ( var i:uint = 0, len = handlers.length; i < len; i++ )
{
if ( handlers [ i ] instanceof Function )
handlers [ i ] ( params );
else
ExternalInterface.call ( handlers [ i ], params );
}
}
}
}
Например подпишемся на евент прямо во флеше, и получим его: подписка от JS происходит точно так же =) Последний раз редактировалось ALiEN_; 26.04.2008 в 14:31. |
![]() |
Часовой пояс GMT +4, время: 23:21. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|