OSDN Git Service

Version 0.6.131, cleanup X.EventDispatcher.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 14_XTimer.js
index 9dbfe40..2954501 100644 (file)
@@ -114,7 +114,7 @@ X.Timer = {
                var list = X_Timer_TICKET_LIST,\r
                        i    = list.length,\r
                        l    = i,\r
-                       f, q;\r
+                       f, q, eventDispatcher, lazy, listeners;\r
                // fire 中の cancel\r
                if( X_Timer_busyTimeout ){\r
                        if( !X_Timer_removal ) X_Timer_removal = {};\r
@@ -123,6 +123,26 @@ X.Timer = {
                        for( ; i; ){\r
                                if( ( q = list[ --i ] ).uid === uid ){\r
                                        list.splice( i, 1 );\r
+                                       \r
+                                       /*\r
+                                        * lazyDispatch 中の EventDispatcher の有無を調べる\r
+                                        */\r
+                                       if( X_EventDispatcher_LAZY_TIMERS[ uid ] ){\r
+                                               eventDispatcher = X_EventDispatcher_LAZY_TIMERS[ uid ];\r
+                                               delete X_EventDispatcher_LAZY_TIMERS[ uid ];\r
+                                               \r
+                                               listeners = eventDispatcher[ '_listeners' ];\r
+                                               if( listeners && !listeners._dispatching && listeners._killReserved ){\r
+                                                       for( uid in X_EventDispatcher_LAZY_TIMERS ){\r
+                                                               if( X_EventDispatcher_LAZY_TIMERS[ uid ] === eventDispatcher ){\r
+                                                                       lazy = true;\r
+                                                                       break;\r
+                                                               };\r
+                                                       };                                              \r
+                                                       !lazy && eventDispatcher.kill();\r
+                                               };\r
+                                       };\r
+                                       \r
                                        !X_Timer_skipUpdate && ( q.last <= X_Timer_waitTime || l === 1 ) && X_Timer_update();\r
                                        break;\r
                                };\r