为了处理原生事件在各个浏览器下的兼容性,上次提出了应对原生事件的事件模型,但随着web的多样性以及新功能需求,常常需要自行实现 ui 组件,例如 树,按钮,菜单等,实现时推荐尽量和原生组件(select , input 等)保持一致,那么也需要暴露事件,不过这时是自定义事件,如果想把模拟 ui 组件做到和原生控件完全一致的体验,那么自定义事件也要具备和原生事件一样的能力。
自定义事件
自定义事件其实是 observer-listener 模式的通俗叫法,本质上和浏览器的事件模型是一致的,由于之前为了应对兼容性问题在客户端已经重新实现了一遍原生事件模型,那么就可以把自定义事件也集成到这个模型中,形成统一的事件模型。
区别点
自定义事件由于完全由应用控制,那么就和原生事件有一些区别:
1. 不需要关联到 dom 节点
虽然原生事件可以由自己完全实现一套,但是最终仍然要调用 addEventListener/attachEvent 对dom节点进行关联(接受浏览器事件通知),而自定义事件则完全避免了这一步。
2. 需要添加冒泡 api
原生事件冒泡不需要模型自己控制,浏览器自会处理,模型只要提供接口操作浏览器 api 控制冒泡行为即可(stopPropagation)。而自定义事件由模型完全控制,那么模型就需要提供冒泡 api,并且可以指定该事件是否可以冒泡以及事件触发源对象的上一级冒泡对象,当触发自定义事件时,模型需要根据冒泡链依次向上触发,并根据是否调用了 stopPropagation 来停止事件传播。
3. 不需要默认事件阻止 api
一般来说原生事件都会附带一些默认行为(a 页面跳转,submit 表单提交等),模型也会提供相应的阻止 api (preventDefault)。而自定义事件则完全不用考虑这个了。
4. 事件的程序触发方式简单(programmatic trigger)
自定义事件的触发比较简单,只要注意自行冒泡即可。而原生事件的程序触发则比较麻烦,虽然可以通过构建原生事件对象交给浏览器dispatch,可这种方式兼容性问题很大(change 等事件根本没法触发),最好的方式还是由模型自己触发,这时需要考虑的是冒泡以及默认事件行为触发。
区分
以上的区别点模型需要在适当的时候进行分支处理,而判断关键就在于当前对象是否是原生对象(是否具有原生事件绑定接口):
obj.addEventListener||obj.attachEvent
最终 api
最终模型暴露出来的 api 应该是:
obj.on(name,fn,context)
obj.detach(name,fn,context)
obj.addBubbleTarget(otherObj) // 自定义事件专属
obj.configBubble(name,isBubble); // 自定义事件专属
obj.fire(name,data)
分享到:
相关推荐
an advanced, unified event model (signals and slots) * an extensible component framework * automatic environment setup (include a single file and go). The widgets provided with ...
To address the specific needs of AJAX applications, the authors propose a UML (Unified Modeling Language) scheme based on MDA principles. This scheme includes: - **Class Diagrams**: Define the ...
本规范主要描述了OPC UA(OPC Unified Architecture)的一部分——地址空间模型(Address Space Model),该部分定义了用于创建OPC UA服务器的模型结构。通过本规范,读者能够了解到如何构建一个符合OPC UA标准的...
《OPC Unified Architecture (OPC UA) Part 3: Address Space Model》是OPC UA标准中的一个重要组成部分,主要阐述了如何在OPC UA系统中管理和组织地址空间。本部分详细介绍了节点模型、变量类型定义、事件模型等...
OPC UA(OPC Unified Architecture)是一种跨平台的、服务导向架构的工业通信标准,广泛应用于自动化和制造领域。OPC UA Part 3 - Address Space Model是OPC UA标准的第三部分,主要描述了OPC UA的地址空间模型,这...
javax.el Provides the API for the Unified Expression Language shared by the JSP 2.1 and JSF 1.2 technologies. javax.enterprise.deploy.model Provides Tool Vendor implementation classes. javax....
OPC(OLE for Process Control)统一架构(Unified Architecture,简称UA)是一种跨平台、面向服务的架构,它定义了信息模型、通信模型和服务模型。信息模型是OPC UA的核心部分之一,它详细描述了客户端和服务器间...
The Unified Object Model 14 The PropertyAccessor 14 Stores and Storage Items 24 User Interface Objects 26 Accounts 28 Performance Improvements 30 Working with Tables Instead of Items 30 Filtering ...
The Unified Object Model 14 The PropertyAccessor 14 Stores and Storage Items 24 User Interface Objects 26 Accounts 28 Performance Improvements 30 Working with Tables Instead of Items 30 Filtering ...
This book provides an overview of modern boot firmware, including the Unified Extensible Firmware Interface (Uefi) and its associated Efi Developer Kit Ii (Edkii) firmware. The authors have each made ...
Use the Flexbox layout model to create responsive mobile designs Leverage the native APIs of Android and iOS to build engaging applications with React Native Respond to gestures in a way that's ...
Contents Part One: Design and Verification Constructs 1. Overview..........................................................................................................................................
OPC UA(OPC Unified Architecture)是一种先进的工业级SOA架构,旨在为工业自动化系统提供一套标准化的通信协议。本部分内容聚焦于OPC UA系列规范的第一部分——概念篇,旨在介绍OPC UA的基本理念和技术框架。以下...
Chapter 7—Intelligent Fuzzy Controller for Event-Driven, Real Time Systems and its VLSI Implementation 1 Fuzzy Logic Finite State Machine 2 Algorithm of Creating a Multiple-Input Fuzzy Model 3...
Aris支持多种流程建模标准,如BPMN(Business Process Model and Notation)、EPC(Event-Driven Process Chain)和UML(Unified Modeling Language)。这些模型可以帮助企业清晰地描绘出业务流程,以便识别瓶颈和...
随着网络技术和Web服务的发展,OPC UA(Unified Architecture)应运而生,它引入了基于XML的通信方式,不仅支持Windows平台,还能在各种操作系统上运行。OPC UA集成了DA、AE、HDA的功能,并增加了安全性和互操作性,...