一.概述
在进行前端开发的时候,如果出现模块与模块之间的通信,我们把这两个模块简称为A和B,我们设想一下A和B通信的条件是,A首先告诉B说要通信,然后A在传递一些数据给B,在前端B没有必要给A一个收到数据的反馈。在这里可以进行这样的设计,A模块中触发一个事件,B模块中注册同样一个事件,这样一旦在B中注册的事件被触发,B就能感知到这个事件并且接收到相关的数据。当然一个事件可以被触发多次注册多次,一次触发,多次注册都会响应。其实这里的事件和前端的一些标准事件的概念是一样的,例如要想在前端响应某个按钮的点击事件,我们可以注册一个click事件,同时编写自己的事件处理函数就好了。如果注册了多个click事件,点击按钮之后这多个click事件都会被触发,即所谓的事件冒泡思想。
二.简单代码测试
event-center.js
/**
* author:yangbolin
* desc:事件中心
* date:2013-02-18
*/
var YBL = new Object();
(function($, app){
YBL.EVENT = {
host:$('<div/>'), //其实就是一个jQuery元素,自定义的事件都可以往这个元素上面注册
pub:function(eType, data) {
// 手动触发一个事件
this.host.trigger(eType, data);
}
}
})(jQuery);
reg-trigger.js
/**
* author:yangbolin
* date: 2013-02-28
* desc: 事件测试
*/
jQuery(function($){
var E = YBL.EVENT,
host = E.host;
var mod = {
init:function() {
this.computeScore();
this.computeLevel();
this.start();
},
start:function() {
var data = {
score:1,
level:2
}
E.pub("RUN", data);// RUN事件的触发
},
/** RUN事件一旦触发就计算分数 **/
computeScore:function(){
host.on("RUN", function(e, data){ //注册RUN事件
console.log("compute score " + data.score);
});
},
/** RUN事件一旦触发就计算级别 **/
computeLevel:function() {
host.on("RUN", function(e, data){
console.log("compute level " + data.level);
});
},
}
mod.init();
});
test.html
<script src=".../jquery/jquery.js"></script>
<script src="event-center.js"></script>
<script src="reg-trigger.js"></script>
运行结果如下:
compute score 1
compute level 2
三.总结
利用事件进行通信的确可以使得模块与模块之间的耦合度降低,特别是一个模块要和多个模块进行通信的时候,这种事件的设计理念就会变得很重要。同时我们学过设计模式的话,观察者设计模式相信大家都不陌生吧,这里的事件机制其实就是所谓的观察者设计模式,事件的注册犹如观察者的注册,事件的触发犹如观察者的notify等等。
分享到:
相关推荐
327Effective前端30:使用响应式开发 336Effective前端31:明白移动端click及自定义事件 344Effective前端32:学习JS高级技巧 355第7章 运用恰当的工具 372Effective前端33:前端的单元测试与自动化测试 372...
第二部分CSS,第三部分JavaScript,第四部分Jquery,第五部分Bootstrap,第六部分微信小程序,第七部分webpack,第八部分常用编程题,第九部分其他常问内容如负载均衡、CDN、内存泄露、babel原理、js自定义事件等,...
了解前端概念,掌握编程规 范,学会HTML必用标签并且能 自定义标签,精通css底层原理 熟练使用达成精准化布局,为后 续课程打下坚实的基础;深入浅出ECMASCRIPT 部分,完全搞懂js底层原理,为 前端工作和技术上进阶...
工作流-OA-低代码表单的 前端工程,基于 Activiti7 Vue3 TS ElementPlus Vite,支持三种布局,自定义主题,同时也是比较完善的前端脚手架。前端是基于 ElementPlus 开发,支持 Chrome、Edge、Firefox、Safari 等现代...
前端编程训练与算法 TicTacToe 三子棋 实现游戏 实现电脑玩家 实现 AI Path finder 寻路算法 寻路地图编辑器 实现广度优先搜索 使用 Async & Await 来方便调试 处理路径问题 启发式寻路(A*) —— 实现 Sorted 类 ...
W3C联盟系统和普通的文档系统内不一样、我们采用强大的可视化编辑器,html及php等多种代码在线演示一键插入、布局简单明了,你要是有点前端基础的还可以自定义添加单页内容自定义调用。系统采用自动seo优化给链接...
Vue + .NetCore前后端分离,不一样的快速发开框架(提供Vue2/Vue3版本)框架核心快速开发(基础功能全部由代码生成器生成)支持前端、后台自定义业务代码扩展,后台提供了大量常用扩展与通用类前端、后台提供了近300个...
第一部分 编程基础 1 第1章 宏与代码 3 1.1 何时使用代码代替宏 4 1.1.1 何时用宏 4 1.1.2 何时用代码 4 1.2 宏到代码的转换 5 1.2.1 使用DoCmd对象 5 1.2.2 与宏命令等价的代码 7 1.3 将现有宏转换...
第8章 VBA编程基础 8.1 VBA语言元素概览 8.2 注释 8.3 变量、数据类型和常量 8.3.1 数据类型的定义 8.3.2 声明变量 8.3.3 变量的作用域 8.3.4 常量的使用 8.3.5 字符串的使用 8.3.6 日期的使用 ...
通过该软件,用户无需编程即可快速构建机器视觉应用系统,这款产品以MVTec深厚的机器视觉专业知识为基础,是一款可靠、快速且易用的机器视觉开发软件,以图像为中心的用户界面, 无需任何编程,以图像为中心的设计...
10.2 Actor2D,前端和中央 10.2.1 Actor2D类的支撑类 10.2.2 使Actor2D对象动起来 10.2.3 扩展Actor2D类 10.3 总结 10.4 练习 第11章 实现一个布景管理系统 11.1 为什么要实现一个布景管理器 11.2 Scene类 11.3 结论...
适用人群:具备一定编程基础,工作1-3年的前端研发人员 适用场景:应用场景需要批量添加字段相同取值不同的数据,数据处理可用可编辑表格的功能实现,本组件的编辑表格组件可添加行,可删除行,可默认赋值进行修改...
这个项目从我作为前端软件工程师的个人需求开始,回到基础知识并奠定基础。 我将其命名为fe-kiddo ,称为“ Frontend kiddo ”,因为我希望在从事编程“ kiddo”工作时努力将自己的职业转变为Web开发领域的知识。 ...
W3C联盟系统和普通的文档系统内不一样、我们采用强大的可视化编辑器,html及php等多种代码在线演示一键插入、布局简单明了,你要是有点前端基础的还可以自定义添加单页内容自定义调用。系统采用自动seo优化给链接...
本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计进度条、设计工具栏和菜单栏、设计面板、设计表格、设计表单、设计数据表、...
本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计进度条、设计工具栏和菜单栏、设计面板、设计表格、设计表单、设计数据表、...
适合人群:具备一定编程基础,工作0-4年的研发人员 能学到什么:①Spring框架和Spring Boot框架都是怎么在系统中体现的;②小程序中游戏 化学习、拍照、在线互动等功能都是如何设计和实现的。 阅读建议:此资源以...
第一部分 编程基础 1 第1章 宏与代码 3 1.1 何时使用代码代替宏 4 1.1.1 何时用宏 4 1.1.2 何时用代码 4 1.2 宏到代码的转换 5 1.2.1 使用DoCmd对象 5 1.2.2 与宏命令等价的代码 7 1.3 将现有宏转换为代码 8...
本项目接口工具软件在本人多年的前端与后台编程配合开发的实践基础上,开发完成的一套项目接口管理工具。具有多项目管理,接口分类,参数自定义,自动生成接口静态页面列表,多级分类浏览,在线测试等功能,是一套...