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
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