OSDN Git Service

Version 0.6.78, bugfix & starting jsdoc.
[pettanr/clientJs.git] / 0.6.x / js / 00_core / 04_XClass.js
index 2de9d36..76e0957 100644 (file)
@@ -99,17 +99,35 @@ X.Class = ( function(){
                                klass    = X.Class._getClass( instance ),\r
                                def      = X.Class._getClassDef( klass ),\r
                                data, p, i;\r
-                       if( def.isPrivate === true && killPrivateFlag === false ){\r
+                       if( def.isPrivate && !killPrivateFlag ){\r
                                X.Notification.critical( 'PrivateInstance.kill() work in PrivateUser.kill().' );\r
                                return;\r
                        };\r
                        killPrivateFlag = false; // onKill 内で PrivateInstance.kill() を防ぐため\r
+                       \r
                        // onKill() === false の場合、kill のキャンセル\r
                        // private      は false での キャンセル は無視される\r
-                       // TODO kill instance event\r
+                       if( this.instanceOf( X.EventDispatcher ) ){\r
+                               if( !def.isPrivate ){\r
+                                       if( this._dispatching ){\r
+                                               this.dispatch( X.Event.BEFORE_KILL_INSTANCE );\r
+                                               this._killReserved = true;\r
+                                               this.dispatch( X.Event.KILL_INSTANCE_CANCELED );\r
+                                               return;\r
+                                       } else\r
+                                       if( this.dispatch( X.Event.BEFORE_KILL_INSTANCE ) & X.Callback.PREVENT_DEFAULT ){\r
+                                               this.dispatch( X.Event.KILL_INSTANCE_CANCELED );\r
+                                               return;\r
+                                       };\r
+                               };\r
+                               this.dispatch( X.Event.BEFORE_KILL_INSTANCE );\r
+                               this.dispatch( X.Event.KILL_INSTANCE );\r
+                               this._listeners && this.unlisten();\r
+                       } else\r
                        if( X.Type.isFunction( instance.onKill ) && instance.onKill() === false && !def.isPrivate ){\r
                                return;\r
                        };\r
+                       \r
                        for( p in instance ){\r
                                if( instance.hasOwnProperty && !instance.hasOwnProperty( p ) ) continue;\r
                                delete instance[ p ];\r
@@ -123,7 +141,11 @@ X.Class = ( function(){
                                if( i !== -1 ){\r
                                        data            = X.Class._getPrivate( instance );\r
                                        killPrivateFlag = true;\r
-                                       data.kill();\r
+                                       if( data._dispatching && data.instanceOf( X.EventDispatcher ) ){\r
+                                               data._killReserved = true;\r
+                                       } else {\r
+                                               data.kill();\r
+                                       };\r
                                        def.dataList.splice( i, 1 );\r
                                        def.userList.splice( i, 1 );\r
                                };\r