* @type {boolean}\r
*/\r
'_killReserved' : false,\r
+\r
+ /**\r
+ * asyncDispatch 中に kill が呼ばれた場合に、X.EventDispatcher インスタンスの削除を最後のタイマーの発火後にずらすために立てるフラグ。\r
+ * TODO asyncDispatch の解除はどうする?\r
+ * @private\r
+ * @type {boolean}\r
+ */\r
+ '_lastLazyID' : false,\r
\r
/**\r
* X.EventDispatcher のコンストラクタの実体。\r
e = delay;\r
delay = 0;\r
};\r
- return X.Timer.add( delay, 1, this, this.dispatch, [ e ] );\r
+ return this[ '_lastLazyID' ] = X.Timer.add( delay, 1, this, X_EventDispatcher_dispatch, [ e ] );\r
}\r
}\r
);\r
};\r
\r
if( ( --this._dispatching ) === 0 ){\r
+ \r
+ if( this[ '_lastLazyID' ] && X_Timer_currentUID === this[ '_lastLazyID' ] ){\r
+ delete this[ '_lastLazyID' ];\r
+ };\r
+ \r
// dispatch 中に unlisten された要素の削除\r
unlistens = this._unlistens;\r
delete this._dispatching;\r
// _unlistens に入っている callbackHash は、lock をクリアしている\r
X_EventDispatcher_unlock = true;\r
for( type in unlistens ){\r
+ //if( X_EMPTY_OBJECT[ type ] ) continue;\r
list = unlistens[ type ];\r
for( i = list.length; i; ){\r
this.unlisten( type, list[ --i ] );\r
if( opt_type === undefined ){\r
// 全て削除\r
for( opt_type in list ){\r
+ //if( X_EMPTY_OBJECT[ opt_type ] ) continue;\r
_list = list[ opt_type ];\r
for( i = _list.length; i; ){\r
this.unlisten( opt_type, _list[ --i ] ); // override されていることがあるので、必ず unlisten を使用\r
} else {\r
console.log( 'event > ' + type );\r
that._handleEvent || ( that._handleEvent = X_Callback_create( that, X_EventDispatcher_actualHandleEvent ) );\r
- \r
\r
if( raw.addEventListener ){\r
raw.addEventListener( type, that._handleEvent, false );\r
type;\r
if( !list || !raw ) return;\r
for( type in list ){\r
+ //if( X_EMPTY_OBJECT[ type ] ) continue;\r
// 数字イベントの除外\r
if( '' + parseFloat( type ) !== type ){\r
// TODO type rename はここ\r