/**\r
* use X.Callback\r
+ * \r
+ * https://developer.mozilla.org/ja/docs/Web/API/EventTarget.addEventListener\r
+ * イベント発送中のリスナーの追加\r
+ * EventListener がイベント処理中に EventTarget に追加された場合、それが現在のアクションによって実行されることはありませんが、浮上フェーズのように、後の段階のイベントフローで実行されるかもしれません。\r
+ * \r
+ * https://developer.mozilla.org/ja/docs/Web/API/EventTarget.removeEventListener\r
+ * イベントリスナーが イベントを処理中であるイベントターゲットから削除された場合、現在のアクションによってそのイベントリスナーが実行されることはありません。\r
+ * イベントリスナーは、決して削除された後に実行されることはありません。\r
+ * イベントターゲット上にある現在のどのイベントリスナーも指定していない引数付きの removeEventListener は、何の効果もありません。\r
*/\r
\r
+X.Event = {\r
+ COMPLETE : 1,\r
+ SUCCESS : 2,\r
+ ERROR : 3,\r
+ PROGRESS : 4,\r
+ _LAST_EVENT : 4\r
+};\r
+\r
+\r
X.EventDispatcher =\r
X.Class.create(\r
'EventDispatcher',\r
// todo\r
// reserve\r
if( !this._reserves ) this._reserves = [];\r
- this._reserves[ this._reserves.length ] = [ type, arg1, arg2, arg3 ];\r
+ this._reserves[ this._reserves.length ] = [ type, arg1, arg2, arg3, X.EventDispatcher._once ];\r
return this;\r
} else\r
if( this.listening( type, arg1, arg2, arg3 ) ) return this;\r
},\r
unlisten : function( type, arg1, arg2, arg3 ){\r
var list = this._listeners,\r
- _list, reservess, unlistens, i, f;\r
+ _list, reserves, unlistens, i, f;\r
if( !list ) return this;\r
if( type === undefined ){\r
// 全て削除\r
ret = X.Callback.NONE,\r
type = e.type,\r
unlistens, i, l, f, r, sysOnly;\r
-\r
+ \r
+ // 数値, 文字が渡された場合\r
+ if( !type ) e = { type : type = e };\r
+ e.target = e.target || this;\r
+ \r
if( !list || !( list = list[ type ] ) ) return ret;\r
\r
++this._dispatching;\r
if( list = this._reserves ){\r
for( i = 0, l = list.length; i < l; ++i ){\r
f = list[ i ];\r
+ X.EventDispatcher._once = f[ 4 ];\r
this.listen( f[ 0 ], f[ 1 ], f[ 2 ], f[ 3 ] );\r
+ X.EventDispatcher._once = false;\r
f.length = 0;\r
};\r
list.length = 0;\r