X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F01_core%2F10_XCallback.js;h=90947912a19062d011072371b42991520f384669;hb=094b0536bafe5efd70540698cf74ab13ece03ebb;hp=e427160069997ba9e07bcbb403f87aba9c4e6fde;hpb=86c591d2888cf7b24365c1950646fb1f6190efd1;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/01_core/10_XCallback.js b/0.6.x/js/01_core/10_XCallback.js index e427160..9094791 100644 --- a/0.6.x/js/01_core/10_XCallback.js +++ b/0.6.x/js/01_core/10_XCallback.js @@ -18,6 +18,8 @@ var X_Callback_HANDLEEVENT = 2, /** @const */ X_Callback_FUNC_ONLY = 3, + /** @const */ + X_Callback_THIS_FUNCNAME = 4, /** @const */ X_Callback_NONE = 0, @@ -177,6 +179,7 @@ function X_Callback_create( thisObject, opt_callback, opt_args /* [ listener || _obj = ret( X_Closure_COMMAND_BACK ); _obj.kind = obj.kind; + _obj.name = obj.name; _obj.func = obj.func; _obj.context = obj.context; _obj.supplement = obj.supplement; @@ -193,12 +196,16 @@ function X_Callback_create( thisObject, opt_callback, opt_args /* [ listener || function X_Callback_classifyCallbackArgs( arg1, arg2, arg3, alt_context ){ var obj; - if( arg1 && X_Type_isFunction( arg2 ) ){ + if( X_Type_isObject( arg1 ) && X_Type_isFunction( arg2 ) ){ obj = { context : arg1, func : arg2, kind : X_Callback_THIS_FUNC }; } else - if( arg1 && X_Type_isFunction( arg1[ 'handleEvent' ] ) ){ - obj = { context : arg1, kind : X_Callback_HANDLEEVENT }; - arg3 = arg2; + if( X_Type_isObject( arg1 ) ){ + if( arg2 && X_Type_isString( arg2 ) ){ + obj = { context : arg1, name : arg2, kind : X_Callback_THIS_FUNCNAME }; + } else { + obj = { context : arg1, kind : X_Callback_HANDLEEVENT }; + arg3 = arg2; + }; } else if( X_Type_isFunction( arg1 ) ){ arg3 = arg2; @@ -216,6 +223,10 @@ function X_Callback_classifyCallbackArgs( arg1, arg2, arg3, alt_context ){ obj = { func : arg2, kind : X_Callback_FUNC_ONLY }; }; } else + if( alt_context && X_Type_isString( arg1 ) ){ + arg3 = arg2; + obj = { context : alt_context, name : arg1, kind : X_Callback_THIS_FUNCNAME }; + } else if( alt_context ){ obj = { context : alt_context, kind : X_Callback_HANDLEEVENT }; arg3 = arg1; @@ -243,7 +254,7 @@ function X_Callback_proxyCallback( xfunc, _args ){ thisObj = xfunc.context, func = xfunc.func, supp = xfunc.supplement, - temp, ret; + temp, ret, funcName; if( supp && supp.length ){ temp = []; @@ -263,9 +274,12 @@ function X_Callback_proxyCallback( xfunc, _args ){ case X_Callback_THIS_FUNC : return args.length === 0 ? func.call( thisObj ) : func.apply( thisObj, args ); - + + case X_Callback_THIS_FUNCNAME : + funcName = xfunc.name; case X_Callback_HANDLEEVENT : - temp = thisObj[ 'handleEvent' ]; + funcName = funcName || 'handleEvent'; + temp = thisObj[ funcName ]; if( X_Type_isFunction( temp ) ){ return args.length === 0 ? thisObj[ 'handleEvent' ]() : args.length === 1 ? thisObj[ 'handleEvent' ]( args[ 0 ] ) : temp.apply( thisObj, args ); @@ -298,6 +312,7 @@ function X_Callback_correct( f ){ X_Callback_POOL_LIST[ X_Callback_POOL_LIST.length ] = f; obj = f( X_Closure_COMMAND_BACK ); delete obj.kind; + if( obj.name ) delete obj.name; if( obj.func ) delete obj.func; if( obj.context ) delete obj.context; if( obj.supplement ) delete obj.supplement;