1 X.EventDispatcher = ( function(){
\r
2 var LIST = [], TEMP = [], once;
\r
4 function getList( instance, type, create ){
\r
5 var i = LIST.indexOf( instance ),
\r
8 if( !create ) return;
\r
9 LIST[ LIST.length ] = instance;
\r
10 TEMP[ TEMP.length ] = data = {};
\r
14 list = data[ type ];
\r
15 if( !create || list ) return list;
\r
16 list = data[ type ] = [];
\r
21 function exist( list, arg1, arg2 ){
\r
22 for( var i = list.length; i; ){
\r
23 if( list[ --i ].same( arg1, arg2 ) === true ) return i;
\r
28 return X.Class.create(
\r
31 listen : function( type, arg1, arg2 ){
\r
32 var list = getList( this, type, true );
\r
33 if( list.length && exist( list, arg1, arg2 ) !== -1 ) return;
\r
34 list[ list.length ] = X.Callback[ once === true ? 'once' : 'create' ]( arg1, arg2 );
\r
36 listenOnce : function( type, arg1, arg2 ){
\r
38 this.listen( type, arg1, arg2 );
\r
41 unlisten : function( type, arg1, arg2 ){
\r
42 var list = getList( this, type ),
\r
45 i = exist( list, arg1, arg2 );
\r
46 i !== -1 && list.splice( i, 1 );
\r
47 if( list.length === 0 ){
\r
48 list.data[ e.type ] = void 0;
\r
52 listening : function( type, arg1, arg2 ){
\r
53 var list = getList( this, type );
\r
54 if( !list ) return false;
\r
55 return exist( list, arg1, arg2 ) !== -1;
\r
57 dispatch : function( e ){
\r
58 // dispatch 中の listen は?
\r
61 var list = getList( this, e.type ),
\r
64 for( i = list.length; i; ){
\r
66 // once の場合リストから削除してからファイア
\r
67 f.once === true && list.splice( i, 1 );
\r
68 if( f( e ) === false ){
\r
71 if( list.length === 0 ){
\r
72 list.data[ e.type ] = void 0;
\r
78 }//, onKillCallback( instance )
\r