event 模块包括 event, event-custom, event-simulate 三部分,类图如下:
- Event 类的调用融合在 Node 中,和 Loader 与 YUI().use 的关系类似。
- 任何对象,只要扩展 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();
});
- CustomEvent 很完整的实现了一套事件管理机制,对象的冒泡、立即停止、订阅器的先进先出和取消执行等等,YUI 3 都支持。
- Do 实现了一套简单的 AOP 机制。
- DOMEventFacade 对原生 e 做了封装,使用起来更自然,很舒服。
- Y.Env.evt.plugins 是事件处理的扩展钩子。在 YUI 3 的代码中,这种扩展和分离机制用得比较多。
快乐学习,欢迎讨论。