JavaScript入门教程

JavaScript简介
JavaScript语法基础
JavaScript流程控制
JavaScript函数
面向对象编程
JavaScript事件
JavaScript DOM
正则表达式
JavaScript BOM
AJAX

专题分析

浏览器兼容性
JS优化
Web前端开发规范
编辑器推荐
总结和笔记

学习助手

对象参考手册
ECMAScript分析
数据中心
QQ交流群

JavaScript分布式事件

在上一章中,我们了解了JavaScript 异步事件的工作方式。但在实践中到底应该怎样处理这些事件呢?

这个问题听起来好像很愚蠢。直接给应用程序关心的每个事件都附加一个处理器不就行了吗?然而,一旦单一的事件有着多重的后果,这种“一事一处理”的方式将迫使处理器规模急剧膨胀。

假设我们正在构建一个类似于Google Docs 的网页版文字处理程序。每当用户按下一个键时,都要做很多事情:新键入的字符必须显示在屏幕上;插入点必须向后移动;这次键入动作必须推入本地的撤销动作历史记录中,且必须与服务器进行同步;拼写检查功能也必须运行起来;字数统计和页数统计也需要加以更新。用一个keypress 处理器就想完成所有这些任务甚至更多任务,这显然会令人望而却步。

从纯机械论的角度看,每项因响应事件而执行的任务都确实必须由事件处理器发起。但是,从人类感性的角度出发,这个庞大的事件处理器通常最好能替换成更具延展性的、动态的构造——一种可以在运行时对其增减任务的构造。简而言之,我们希望使用分布式事件:事件的蝴蝶偶然扇动了下翅膀,整个应用到处都引发了反应。

在本章中,你将会学到如何使用PubSub(Publish/Subscribe,意为“发布/订阅”)模式来分发事件。沿着这个思路,我们会看到PubSub 模式的一些具体表现:Node 的EventEmitter 对象、Backbone 的事件化模型和jQuery 的自定义事件。在这些工具的帮助下,我们能解嵌套那些嵌套式回调,减少重复冗余,最终编写出易于理解的事件驱动型代码。