event 模块包括 event, event-custom, event-simulate 三部分,类图如下:

  1. Event 类的调用融合在 Node 中,和 Loader 与 YUI().use 的关系类似。
  2. 任何对象,只要扩展 EventTarget 接口,就自动具有了一套事件管理机制。使用很简单:
    YUI().use('event', function(Y) {
    function Pig() {
    // 公布事件
    this.publish('farting', {
    emitFacade: true,
    defaultFn: function() {
    alert('猪猪放屁啦');
    }
    });
    }
    Pig.prototype.fart = function() {
    // 触发事件
    this.fire('farting');
    };
    Y.augment(Pig, Y.EventTarget);

    var pig = new Pig();
    // 订阅事件
    pig.on('farting', function(e) {
    e.preventDefault();
    alert('小猪猪乖,不放屁');
    });
    pig.fart();
    });
  3. CustomEvent 很完整的实现了一套事件管理机制,对象的冒泡、立即停止、订阅器的先进先出和取消执行等等,YUI 3 都支持。
  4. Do 实现了一套简单的 AOP 机制。
  5. DOMEventFacade 对原生 e 做了封装,使用起来更自然,很舒服。
  6. Y.Env.evt.plugins 是事件处理的扩展钩子。在 YUI 3 的代码中,这种扩展和分离机制用得比较多。

快乐学习,欢迎讨论。