OSDN Git Service

Version 0.6.41, fix for Opera8 & NN7.2+.
[pettanr/clientJs.git] / 0.6.x / js / core / 06_XEventDispatcher.js
index 29ff847..a4a1338 100644 (file)
@@ -1,7 +1,25 @@
 /**\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
@@ -20,7 +38,7 @@ X.EventDispatcher =
                                        // 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
@@ -42,7 +60,7 @@ X.EventDispatcher =
                        },\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
@@ -126,7 +144,11 @@ X.EventDispatcher =
                                        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
@@ -174,7 +196,9 @@ X.EventDispatcher =
                                        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