骨干网.js如何实现事件

How does Backbone.js implement events?

本文关键字:实现 事件 js 何实现 骨干网      更新时间:2023-09-26

澄清:

我只针对支持createEvent,addEventListener等的现代浏览器。

问题

我的意思是原生的,在JavaScript中。 搜索显示他们没有使用createEvent()

我正在文档中寻找答案,但没有找到任何答案。

我在这里的源代码中搜索了createEvent(),但没有点击。

骨干网如何从母语角度实现事件?

他们是否使用观察者模式?

如果 JavaScript 已经有可用的自定义事件(通过 createEvent() ),并且事件侦听器也可用(addEventListener()为什么他们不使用内置事件?

为什么 Backbone 不使用本机事件?

将本机事件用于主干视图以外的任何内容都没有意义。 主干网为模型、集合和一般提供事件管理

本机事件(通过createEventaddEventListener)绑定到DOM节点。 模型和集合不与 DOM 节点相关联 - 您必须跳过许多不必要的箍才能重用该代码。

主干事件是否遵循观察者模式?

不是真的,不是。 Backbone.Events更接近发布-订阅模式。 对象维护命名事件的事件侦听器列表(通过 on ),然后该对象在想要触发事件时通过 trigger 触发对这些侦听器的调用。

如何实施骨干事件?

在其核心,Backbone为每个事件

维护一个事件侦听器数组(在旧版本的Backbone中,它曾经使用链表;这更慢)。 每个对象维护自己的侦听器列表;没有中央登记处。

trigger 上,主干会调用为该事件注册的所有侦听器;并且还会调用特殊情况all事件的任何侦听器。

Backbone 就是这样做的。它是 163 行代码,计算空白和注释。

澄清如何

  • 基本的东西,如正则表达式拆分事件名称,绑定侦听器的简单注册表,它们是简单的对象文字
  • on|bindoff|unbindtriggeroncelistenTostopListening的 API

至于为什么,它是基于作者和贡献者做出的设计决策,他们认为符合项目的目标和风格。命名空间和多事件绑定是很好的便利,因为主干模型、集合和视图使用的常见模式。

是的,他们正在使用观察者模式。所有基于事件的系统都包含观察者模式的实现。从广义上讲,事件、发布/订阅和观察者是同义词,尽管有些人可能会发现在详细讨论时区分它们很重要。