第一种方式,直接将自定义事件存放在__onfireEvents中
var __onfireEvents = {}; function _bind(eventName, callback, is_one, context) { if (typeof eventName !== string_str || typeof callback !== function_str) { throw new Error('args: '+string_str+', '+function_str+''); } if (! hasOwnKey(__onfireEvents, eventName)) { __onfireEvents[eventName] = {}; } __onfireEvents[eventName][++__cnt] = [callback, is_one, context]; return [eventName, __cnt]; } function on(eventName, callback, context) { return _bind(eventName, callback, 0, context); }
第二种方式,同样是将自定义事件存储起来,不同之处是绑定在元素上,是否有必要?这里有什么优势吗?
$customSubMap = {}; subscribeEvent = function ( $collection, event_name, fn ) { $collection.on( event_name, fn ); if ( ! $customSubMap[ event_name ] ) { $customSubMap[ event_name ] = $collection; } else { $customSubMap[ event_name ] = $customSubMap[ event_name ].add( $collection ); } };
绑定在元素上好像是用到了jquery的事件绑定,看你这个自定义事件是不是用在dom元素上的,如果只是模块间的传递第一种就可以了,如果是dom事件,就得放在元素上,触发方便。