1 /**
  2  * @fileOverview KISSY Scalable Event Framework
  3  * @author yiminghe@gmail.com
  4  */
  5 KISSY.add("event", function (S, _data, KeyCodes, Event, Target, Object) {
  6     S.mix(Event,
  7         /**
  8          * @lends Event
  9          */
 10         {
 11             KeyCodes:KeyCodes,
 12             Target:Target,
 13             Object:Object,
 14             on:Event.add,
 15             detach:Event.remove,
 16             /**
 17              *
 18              * @param targets KISSY selector
 19              * @param {String} [eventType] The type of event to delegate.
 20              * use space to separate multiple event types.
 21              * @param {String|Function} selector filter selector string or function to find right element
 22              * @param {Function} [fn] The event handler/listener.
 23              * @param {Object} [scope] The scope (this reference) in which the handler function is executed.
 24              */
 25             delegate:function (targets, eventType, selector, fn, scope) {
 26                 return Event.add(targets, eventType, {
 27                     fn:fn,
 28                     scope:scope,
 29                     selector:selector
 30                 });
 31             },
 32             /**
 33              * @param targets KISSY selector
 34              * @param {String} [eventType] The type of event to undelegate.
 35              * use space to separate multiple event types.
 36              * @param {String|Function} selector filter selector string or function to find right element
 37              * @param {Function} [fn] The event handler/listener.
 38              * @param {Object} [scope] The scope (this reference) in which the handler function is executed.
 39              */
 40             undelegate:function (targets, eventType, selector, fn, scope) {
 41                 return Event.remove(targets, eventType, {
 42                     fn:fn,
 43                     scope:scope,
 44                     selector:selector
 45                 });
 46             }
 47         });
 48 
 49     S.mix(Event, _data);
 50 
 51     S.mix(S, {
 52         Event:Event,
 53         EventTarget:Event.Target,
 54         EventObject:Event.Object
 55     });
 56 
 57     return Event;
 58 }, {
 59     requires:[
 60         "event/data",
 61         "event/keycodes",
 62         "event/base",
 63         "event/target",
 64         "event/object",
 65         "event/focusin",
 66         "event/hashchange",
 67         "event/valuechange",
 68         "event/mouseenter",
 69         "event/submit",
 70         "event/change",
 71         "event/mousewheel",
 72         "event/add",
 73         "event/remove"
 74     ]
 75 });
 76 
 77 /**
 78  *  2012-02-12 yiminghe@gmail.com note:
 79  *   - 普通 remove() 不管 selector 都会查,如果 fn scope 相等就移除
 80  *   - undelegate() selector 为 "",那么去除所有委托绑定的 handler
 81  */